Frage

Ich habe einen regelmäßigen Ausdruck in PHP, der nach dem Datum im Format von yyjy-mm-dd sucht

Was ich habe ist: [\d]{4}-[\d]{2}-[\d]{2}

Ich verwende preg_match, um das Datum zu testen. Das Problem ist das 2009-11-10 funktioniert, aber 2009-11-1033434 funktioniert auch. Es ist schon eine Weile her, seit ich Regex gemacht habe. Wie stelle ich sicher, dass es an der richtigen Stelle aufhört? Ich habe versucht zu tun /([\d]{4}-[\d]{2}-[\d]{2}){1}/, aber es gibt das gleiche Ergebnis zurück.

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Was Sie brauchen, sind Anker speziell ^ und $. Ersteres entspricht dem Beginn der Saite, letzteres entspricht dem Ende.

Der andere Punkt, den ich machen würde, ist das [] sind unnötig. \d behält seine Bedeutung außerhalb der Charakterbereiche.

Ihr Regex sollte also so aussehen: /^\d{4}-\d{2}-\d{2}$/.

Andere Tipps

Wie erwarten Sie, dass Ihr Datum gekündigt wird?

Wenn ein Zeilenende, dann eine Anhängerschaft $ sollte den Trick machen.

Wenn durch einen nicht-digiten Charakter, dann ein folgendes Negativ Behauptung (?!\d) wird ähnlich funktionieren.

^20[0-2][0-9]-((0[1-9])|(1[0-2]))-([0-2][1-9]|3[0-1])$

Ich fügte ein wenig zusätzliche Überprüfung hinzu, um das Problem zu unterstützen MM und DD vom Benutzer durcheinander gebracht werden. Dies fängt nicht alle Date -Mix -ups an, hält aber die beibehält YYYY Teil zwischen 2000 und 2029, das MM zwischen 01 und 12 und die DD zwischen 01 und 31

Sie möchten wahrscheinlich den Ausdruck verankert. dh

^[\d]{4}-[\d]{2}-[\d]{2}$

Beachten Sie das Pfarr- und Dollarschild.

[\d]{4}-[\d]{2}-[\d]{2}?

wo das Fragezeichen "nicht greedy" bedeutet

Sie möchten wahrscheinlich voraussagen (unter der Annahme, dass Ihr Engine sie unterstützt, tut PHP/PREG/PCRE).

Schauen Sie sich die Behauptungen (oder positive Behauptungen) an, lassen Sie Sie sagen: "Und es sollte von x folgen, aber X sollte nicht Teil der Übereinstimmung sein." Probieren Sie die folgende Syntax aus

\d{4}-\d{2}-\d{2}(?=[^0-9])

Die Behauptung ist dieser Teil

(?=[^0-9])

Es heißt "Nach meinem Regex kann der nächste Charakter keine Nummer sein"

Wenn das nicht das, was Sie wollen/benötigen, veröffentlichen, veröffentlichen Sie ein Beispiel für Ihre Eingabe und Ihren PHP -Code, der nicht funktioniert. Diese beiden Gegenstände können er sehr nützlich, um diese Art von Problemen zu debuggen.

Sie könnten versuchen, zu Beginn und am Ende Ihres Ausdrucks sowohl ein "^" als auch ein "$" -Symbol zu setzen:

/^[\d]{4}-[\d]{2}-[\d]{2}$/

die dem Start und dem Ende der Zeichenfolge übereinstimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top