kostenloser Webspace werbefrei: lima-city


Regex Syntax - ich blicks nicht...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mathesoft

    Kostenloser Webspace von mathesoft

    mathesoft hat kostenlosen Webspace.

    Ich murkse nun schon 4h dran rum, habe mir durchgelesen und ausprobiert, was auf http://de2.php.net/manual/de/reference.pcre.pattern.syntax.php steht, aber es will immernochnicht und ich steige nicht wirklich dahinter :frown:

    Problem: ich habe ein paar Eingabefelder in einem Formular, die ich individuell auf Falscheingaben (zB xss) prüfen will und dann soll die Verarbeitung abbrechen. Die Prüfung möchte ich mit preg_match machen und zwar:
    if preg_match(..verboteneZeichen..) abbruch;

    Ich könnte auch die erlaubtenZeichen negieren, also alle anderen als die angegebenen...

    Ich weiß schon garnicht, wie man ein Leerzeichen schreibt. :space: ist ja mehr als \s und eine Lücke in [ ] geht nicht, ist es der Unterstrich vielleicht??

    Feld 1: Nameseingabe, zulässige Zeichen wären a-z, Leerzeichen, Bindestrich, Umlaute
    preg_match('/^[a-zA-Z_\-öäüÖÄÜß]/',$mystr) ... funzt nicht (wenn da jemand "<script>" reinschreibt, brichts nicht ab).

    Feld 2: Telefonnummer, da wären möglich 0-9 und / und Leerzeichen, Plus, Minus, vielleicht auch Klammern.

    Feld 3: eMail: a-z, punkt, @ und Unterstrich

    Bitte verrate mir die Syntax, oder was ich besser machen könnte :shy:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Was ich mich zuerst frage: Wieso prüfst du auf Zeichen, die nicht vorhanden sein drüfen? In meinen Augen macht es mehr Sinn, wenn du wirklich per Regex vorgibts, wie die Zeichenkette aufgebaut sein muss. Der Vorteil dabei ist, denke ich, dass man wenn man bisschen im Regex geübt ist direkt das - sagen wir Template - lesen zu können.

    Versuch für Feld 1 mal folgendes:
    /^[a-zA-Z_\-öäüÖÄÜß]+$/
    -> nach [] ein +, um anzugeben, dass mehr als nur ein Zeichen validiert wird, am Ende des Regex ein $ - es ist das Gegenteil von ^ und gibt somit an, dass das Regex dort zuende ist.

    Feld 2: Dafür hab ich persönlich schon viele Regex Scripte gesehen, kannst ja mal Googlen und fremde übernehmen oder dir so Anregungen holen. Um selbst ein Script zu schreiben musst du dir erstmal klar werden wie genau können die verschiedenen Arten der Telefonnummern aussehen, die schreibst du dir auf und überlegst dir eine mögliche Lösung die alle Fälle abdeckt.

    Feld 3: Ähnlich wie Feld2, allerdings kannst du hier schon von einem Regex in folgende Richtung ausgehen
    /^[a-zA-Z0-9_]+\@[a-zA-Z]+\.(de|com|net|[a-zA-Z]+)$/

    Dieses Script sollte dir natürlich nur eine Anregung geben, wurde nicht getestet und bittet um Verbesserung ;)

    Beitrag zuletzt geändert: 9.12.2013 23:07:57 von copynpaste
  4. Autor dieses Themas

    mathesoft

    Kostenloser Webspace von mathesoft

    mathesoft hat kostenlosen Webspace.

    Erstmal danke für deine Antwort. Ich habe derweil weitergelesen und rumprobiert, aber es klappt noch nicht.

    copynpaste schrieb:
    Was ich mich zuerst frage: Wieso prüfst du auf Zeichen, die nicht vorhanden sein dürfen?
    Weil nur Spammer/Hacker bestimmte Zeichen verwenden und alle anderen sollen es nicht :wink:

    Versuch für Feld 1 mal folgendes:
    /^[a-zA-Z_\-öäüÖÄÜß]+$/
    -> nach [] ein +, um anzugeben, dass mehr als nur ein Zeichen validiert wird, am Ende des Regex ein $ - es ist das Gegenteil von ^ und gibt somit an, dass das Regex dort zuende ist.
    Irgendwie gibt es da unterschiedliche Aussagen, wozu ^ und $ sind; das fand ich noch in einem anderen Forum:
    ^ bedeutet dass das script nur zeichenketten am ANFANG matcht
    $ bedeutet, dass das script nur zeichenketten am ENDE matcht

    beides zugleich geht schwer

    Der Betreffende hat es dann entfernt und es lief bei ihm; bei mir aber nicht :frown:

    Da das erste noch nicht funktioniert, habe ich an den anderen noch nicht weiter gedacht.
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Wie wäre es so?
    $name = '/^[-a-zA-ZäöüÄÖÜß ]+$/';
    $phone = '/^\\+?[ 0-9\\/\\(\\)-]+$/';

    mathesoft schrieb:
    Irgendwie gibt es da unterschiedliche Aussagen, wozu ^ und $ sind; das fand ich noch in einem anderen Forum:
    ^ bedeutet dass das script nur zeichenketten am ANFANG matcht
    $ bedeutet, dass das script nur zeichenketten am ENDE matcht

    beides zugleich geht schwer

    ^
    = Zeilenanfang (oder innerhalb von
    []
    eine Negierung)
    $
    = Zeilenende

    Sowas matcht nur, wenn das am Zeilenanfang steht:
    ^abc

    Sowas hingegen nur, wenns am Zeilenende steht:
    bla$
    .
    Mischen lässt sichs trotzdem:
    ^abc$
    (Hierbei darf die Zeile nur »abc« enthalten).
    Und was du hattest:
    ^[a-zA-Z]+$
    , die Zeile muss ausschließlich aus Buchstaben bestehen.
  6. Regexen sind echt 'ne tolle Sache. Ich setze sie unabhängig von der gerade verwendeten Programmiersprache gerne und häufig ein um nicht-triviale Muster auszuwerten. Du lernst die Systematik einmal lernen, wie vom TE beschrieben nicht unbedingt schmerzlos, kannst dich danach aber beruhigt zurücklehnen und sparst dir à la longue sehr viel Zeit und Mühe.

    Einige Tipps zu Aufzucht und Pflege:
    -Testmuster in eine separten Datei zusammenfassen und damit testen. Nicht mit positiven und negativen matches sparen, insbesondere auf Randbedingungen achten. Stichwort: Unit-Tests
    -wichtige getestete Muster in einer extra Datei sammeln und damit einfach wiederverwendbar machen. Beispiele: Telefonnummer, URL, Geldbetrag etc.
    -die Testmuster Schritt-für-Schritt erweitern, bei Fehlern einen Schritt zurück und intensiv nachdenken:-)
    -Regexen können auch mehrere Elemente eines Suchbefriffes auf einmal identifizieren und als Resultat zurückliefern.
    -In der .htaccess eingesetzt lassen sich damit hübsche Dinge umsetzen.

    Hier noch ein einführender link http://webcheatsheet.com/php/regular_expressions.php sowie ein Online-Schnelltest http://www.phpliveregex.com/.
  7. Hallo

    beachte bei äöüÄÖÜß in RegEx Pattern auch den Charset !!!

    wenn Du
    $name ='/^[-a-zA-ZäöüÄÖÜß ]+$/';
    machst
    muss der String auch in Charset ISO-8859-15 vorliegen
    (oder anderes Charset das deutsche Umlaute hat)

    Meist liegt der String in UFT-8 vor,
    dann musst Du auch im RegEx Pattern die Umlaute als UTF-8 Zeichen haben
    und ggf. auch Modifier /u für UTF-8 anhängen

    $umlaute = utf8_encode('äöüÄÖÜß'); 
    $name ='/^[-a-zA-Z'.$umlaute.' ]+$/u';
    
    preg_match($name,$mystr,$matches)


    Code nicht getestet .. nur als Hinweis, dass man auf Charset (ISO / UTF-8) achten muss !!
  8. copynpaste schrieb:
    Feld 3: Ähnlich wie Feld2, allerdings kannst du hier schon von einem Regex in folgende Richtung ausgehen
    /^[a-zA-Z0-9_]+\@[a-zA-Z]+\.(de|com|net|[a-zA-Z]+)$/

    Dieses Script sollte dir natürlich nur eine Anregung geben, wurde nicht getestet und bittet um Verbesserung ;)

    Am besten
    filter_var('bob+test@example.com', FILTER_VALIDATE_EMAIL);
    benutzen.
    Habe auf vielen Seiten Probleme mit meiner eMail-Adresse, weil ich ein "+" drin hab.
    Selbst größere Seiten à la Microsoft sind zu doof dafür. :(

    Lustig wird’s wenn sie die Validierung umstellen und man sich nicht mehr einloggen kann (und man auch die Adresse nicht mehr ändern kann).
  9. Autor dieses Themas

    mathesoft

    Kostenloser Webspace von mathesoft

    mathesoft hat kostenlosen Webspace.

    Hallo,

    erstmal danke für die Tipps und Hinweise, ich schätze das sehr (leider kann ich dafür noch keine Bewertungen verteilen).

    Da ich derzeit was anderes erledigen muss, habe ich das Thema erstmal auf Wiedervorlage gesetzt, also mache ich ein andermal damit weiter; wollte mich einfach zunächst bedanken :thumb:
    Gelöst hab ichs noch nicht...
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!