Regulärer Ausdruck, der Datum im YJJJ-MM-DD-Format entspricht
-
19-09-2019 - |
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.
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.