PHP-Funktion (mit Regex) in VB verwenden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    PHP-Funktion (mit Regex) in VB verwenden

    Hallo zusammen,

    ich benötige eure Hilfe beim umsetzen einer PHP-Funktion (mit Regex) nach VB.

    Ich benutze den Onlineshop (Prestashop) um meine kleine Welt an Ersatzteilen für mich privat und lokal Zuhause zu organisieren. Leider kann ich dort nicht alles so eingeben und verwalten wie ich es gerne hätte. Kurzum bin ich dabei, mir ein Programm in VB zu schreiben, um Daten direkt in die MySQL-DB zu schreiben. Leider fehlt mir einiges an PHP-Kenntnissen, um alles in der unten angefügten Funktion nachzuvollziehen zu können.
    Bei meinem aktuellen Problem gibt in der MySQL Tabelle ein Feld, in dem die (Kategorie)-Bezeichnung als gültige URL gespeichert wird und ich schaffe (raffe) es einfach nicht die PHP-Funktion in VB umzusetzen. Ich wende mich deshalb mal an Euch und hoffe, dass Ihr mir weiterhelfen könnt.
    Zu meiner Schande muss ich gestehen, dass ich das mit den Regex-Pattern grad mal überhaupt nicht kapiere. Eine Funktion, in der ich alle Umlaute im angegebenen String umwandle habe ich bereits. Mein Hauptproblem beginnt eigentlich in der PHP-Routine ab "// Remove all non-whitelist chars.".

    Als Beispiel sieht die Beschreibung "DIN - Stecker, Buchsen & Kupplungen" später als URL in Prestashop wie folgt aus: "din-stecker-buchsen-kupplungen"

    Ich habe hier mal die originale PHP-Funktion beigefügt und hoffe dass Ihr mir bei der Umsetzung zu VB helfen könnt.
    Spoiler anzeigen

    PHP-Quellcode

    1. Public Static Function str2url($str)
    2. {
    3. Static $array_str = Array();
    4. Static $allow_accented_chars = null;
    5. Static $has_mb_strtolower = null;
    6. If ($has_mb_strtolower === null) {
    7. $has_mb_strtolower = function_exists('mb_strtolower');
    8. }
    9. If (isset($array_str[$str])) Then {
    10. Return $array_str[$str];
    11. }
    12. If (!is_string($str)) Then {
    13. Return False;
    14. }
    15. If ($str == '') {
    16. Return '';
    17. }
    18. If ($allow_accented_chars === null) {
    19. $allow_accented_chars = Configuration:get('PS_ALLOW_ACCENTED_CHARS_URL');
    20. }
    21. $return_str = trim($str);
    22. If ($has_mb_strtolower) {
    23. $return_str = mb_strtolower($return_str, 'utf-8');
    24. }
    25. If (!$allow_accented_chars) {
    26. $return_str = Tools:replaceAccentedChars($return_str);
    27. }
    28. // Remove all non-whitelist chars.
    29. If ($allow_accented_chars) {
    30. $return_str = preg_replace('/[^a-zA-Z0-9\s\'\:\/\[\]\-\p{L}]/u', '', $return_str);
    31. } else {
    32. $return_str = preg_replace('/[^a-zA-Z0-9\s\'\:\/\[\]\-]/', '', $return_str);
    33. }
    34. $return_str = preg_replace('/[\s\'\:\/\[\]\-]+/', ' ', $return_str);
    35. $return_str = str_replace(array(' ', '/'), '-', $return_str);
    36. // If it was Not possible to lowercase the string with mb_strtolower, we do it after the transformations.
    37. // This way we lose fewer special chars.
    38. If (!$has_mb_strtolower) {
    39. $return_str = Tools:strtolower($return_str);
    40. }
    41. $array_str[$str] = $return_str;
    42. Return $return_str;
    43. }

    Würde mich freuen, wenn mir jemand von euch weiterhelfen könnte,

    Danke und viele Grüße, Michael

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Module Module1
    3. Sub Main()
    4. Dim return_str As String = " DIN - Stecker, Buchsen/ & Kupplungen"
    5. return_str = return_str.Trim
    6. return_str = Regex.Replace(return_str, "[^a-z0-9]+", "-", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
    7. return_str = return_str.ToLower
    8. Debug.Print(return_str)
    9. End Sub
    10. End Module
    Hallo Eierlein,

    jetzt bin ich aber etwas sprachlos, dass daraus sozusagen ein "Einzeiler" geworden ist! Ich teste das jetzt mal mit meinen bereits angelegten Kategorien durch und gebe dann nochmal ein Feedback!

    Nochmal, ein ganz großes Danke an dieser Stelle für die schnelle Hilfe!

    VG, Michael