2017-06-24 2 views
2

Ich benutze PHP-Version 7.0.14. Trotz einiger guter Beispiele auf stackoverflow kann ich meine PHP-Regex nicht zum Laufen bringen. Ich habe stundenlang jede erdenkliche Kombination ausprobiert. Das Problem tritt bei dem Versuch auf, Perioden und Schrägstriche zuzulassen, die maskiert werden müssen. Ich habe versucht, die Regex in doppelten und einfachen Anführungszeichen einzuschließen. Ich habe versucht, mit einem Backslash, zwei, drei, vier zu entkommen. Es wird entweder ausgelassen, lässt alles durch (wie $) oder lässt keine Punkte und Schrägstriche zu.php - Adresse mit regulärem Ausdruck validieren

$strStreet = "123 1/2 S. Main St. Apt. 1"; 
    #$strRegEx = "/^[a-z0-9 ,#-'\/]{3,50}$/i"; 
    $strRegEx = '/^[a-z0-9 ,#-\'\/]{3,50}$/i'; 
    if (preg_match($strRegEx, $strStreet) === 0) { 
    print "bad address"; 
    } 

Vielen Dank im Voraus für jede Hilfe.

+0

dank chris85 ... Genie ... wenn Sie Ihre Antwort als eine Antwort setzen kann ich Ihnen Guthaben –

+0

oops ... ich habe gerade bemerkt, dass der Zeitraum nicht maskiert ist ... warum wird es nicht als "irgendein Charakter" interpretiert –

+0

Nur ein fyi, Adressen und Regex zusammen verwenden wird nicht empfohlen https://smartystreets.com/ Artikel/reguläre Ausdrücke für Straßenadressen – camiblanch

Antwort

2

Sie haben zwei Probleme hier:

  1. gibt es keine . in Ihre Zeichenklasse (in einer Zeichenklasse der . muss nicht entgangen sein)
  2. die - in einer Zeichenklasse muss Entweichen oder nach vorne oder nach vorne verschoben werden (in anderen Regex-Engines ist das Entweichen nicht verfügbar). Für sich genommen erzeugt es eine Reihe von Zeichen auf jeder Seite.

so:

^[-a-z0-9 ,#'\/.]{3,50}$ 

sollte für Sie arbeiten. (Auch wenn Sie ein anderes Trennzeichen der Schrägstrich wird nicht entkommen müssen)

Demo: https://regex101.com/r/PfZAlO/1/

Verwandte Themen