Ich muss eine Datumszeichenfolge für das Format dd/mm/yyyy
mit einem regulären Ausdruck überprüfen.
Dieser reguläre Ausdruck überprüft dd/mm/yyyy
, jedoch nicht die ungültigen Daten wie 31/02/4500
:
^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$
Was ist ein gültiger regulärer Ausdruck zur Validierung des dd/mm/yyyy
Formats mit Schaltjahrunterstützung?
pattern
Regulärer Ausdruck" enthält und die Browser automatisch ohne Verwendung von Javascript anhand des regulären Ausdrucks validieren. Nur durch Setzen eines regulären Ausdrucks im Musterattribut!Antworten:
Der Regex, den Sie eingefügt haben, validiert Schaltjahre nicht korrekt, aber es gibt einen, der im selben Beitrag verwendet wird . Ich habe es geändert, um zu nehmen
dd/mm/yyyy
,dd-mm-yyyy
oderdd.mm.yyyy
.^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
Ich habe es ein bisschen in dem Link getestet, den Arun in seiner Antwort angegeben hat, und auch hier und es scheint zu funktionieren.
Bearbeiten 14. Februar 2019: Ich habe ein Komma in der Regex entfernt, das Daten wie erlaubt
29-0,-11
quelle
DD/MM/YYYY
diese regex akzeptiert auch ,DD/MM/YY
die ich bin mir nicht sicher , dass es in der ursprünglichen Absicht des Plakats war. Wenn Sie 'YY' nicht unterstützen möchten, entfernen Sie alle optionalen?
Quantifizierer.0?
durch0
und entfernen auch das letzte Vorkommen von?
.?
, die entfernt werden sollten: Ersetzen Sie alle(?:1[6-9]|[2-9]\d)?
durch(?:1[6-9]|[2-9]\d)
.Ich habe den von @Ofir Luzon angegebenen regulären Ausdruck für die Formate TT-MMM-JJJJ, TT / MMM / JJJJ, TTMMM.JJJJ gemäß meiner Anforderung erweitert. Jeder andere mit der gleichen Anforderung kann darauf verweisen
und für einige Testfälle hier getestet http://regexr.com/39tr1 .
Zum besseren Verständnis dieses regulären Ausdrucks beziehen Sie sich auf dieses Bild:
quelle
8888
ist ein mögliches Jahr. Ich erwarte, ungefähr in diesem Alter zu leben.Beachten:
Es funktioniert also nur für [1901 - 2099] (Puh) properly richtig
DD / MM / JJJJ:
Überprüft das Schaltjahr. Jahre von 1900 bis 9999 sind gültig. Nur TT / MM / JJJJ
quelle
29/02/2100
existiert nicht (2100 ist KEIN Schaltjahr), wird aber dennoch von dem angegebenen Muster akzeptiert.Versuche dies.
Sie können den regulären Ausdruck unter http://www.regular-expressions.info/javascriptexample.html einfach testen .
quelle
30-02-2001
... trotzdem danke für die Antwort :)Ich vermute, dass das Folgende so genau ist, wie es zu erwarten ist, ohne zu wissen, wann das Gebietsschema des Benutzers vom julianischen auf den gregorianischen Kalender umgestellt wurde.
Es akzeptiert entweder '-', '/' oder nichts als Trennzeichen zwischen Jahr, Monat und Tag, unabhängig von der Reihenfolge.
MMddyyyy:
DD / MM / JJJJ:
yyyyMMdd:
Abgesehen von der Reihenfolge entsprechen diese alle dem julianischen Kalender (Schaltjahr alle vier Jahre) bis 1700, wenn der gregorianische Kalender vom julianischen abweicht. Es gibt zwei Probleme:
Dies wurde anhand der Kalenderimplementierung von Java vom Jahr 0001 bis zum Jahr 9999 getestet, wobei die einzige Diskrepanz die oben genannten 10 Tage im Jahr 1582 waren.
quelle
^([0-9]{4}[-/]?((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048])00)[-/]?02[-/]?29)$
. Getestet mit Python: repl.it/repls/DependentBestChaptersFür diejenigen, die sich diese ansehen und völlig verwirrt sind, ist hier ein Auszug aus meinem Skript. Leider stimmt es nur mit gültigen Zahlen in einer Datums- / Uhrzeit-Eingabe überein, und der 31. Februar wird als gültig markiert, aber wie so viele gesagt haben, ist Regex wirklich nicht das beste Werkzeug, um diesen Test durchzuführen.
Um ein Datum im Format 'JJJJ-MM-TT hh: mm' abzugleichen (oder in beliebiger Reihenfolge)
Das obige Skript beginnt mit dem Erstellen eines Regex-Objekts. Es findet dann alle Eingaben, deren IDs einem bestimmten Muster entsprechen, und durchläuft diese dann. Ich teste nicht die erste Eingabe, die ich finde (
if (e > 0)
).Ein bisschen Erklärung:
^
bedeutet Spielbeginn, während Spielende$
bedeutet.\d+
bedeutet, dass eine einzelne oder eine zusammenhängende Folge von ganzen Zahlen übereinstimmt, alsomyhtml_element_with_id_56_datetime
undmyhtml_element_with_id_2_datetime
übereinstimmt, abermyhtml_element_with_id_5a_datetime
nichtquelle
Hier ist eine andere Version von Regex, die mit einem der folgenden Datumsformate übereinstimmt und das Weglassen führender Nullen ermöglicht:
Regex:
^[0-3]?[0-9].[0-3]?[0-9].(?:[0-9]{2})?[0-9]{2}$
Streichhölzer:
1/1/11 or 1.1.11 or 1-1-11 : true 01/01/11 or 01.01.11 or 01-01-11 : true 01/01/2011 or 01.01.2011 or 01-01-2011 : true 01/1/2011 or 01.1.2011 or 01-1-2011 : true 1/11/2011 or 1.11.2011 or 1-11-2011 : true 1/11/11 or 1.11.11 or 1-11-11 : true 11/1/11 or 11.1.11 or 11-1-11 : true
Debuggex-Demo
quelle
13/13/2000
= Spielen ist wahrHier habe ich einen geschrieben, bei
dd/mm/yyyy
dem der Separator ein-.,/
Jahr sein kann0000-9999
.Es befasst sich mit Schaltjahren und wurde für Regex-Aromen entwickelt , die Lookaheads, das Erfassen von Gruppen und Rückreferenzen unterstützen. NICHT gültig für wie
d/m/yyyy
. Fügen Sie bei Bedarf weitere Trennzeichen hinzu[-.,/]
Test bei regex101 ; als Java-String:
erklärt:
Siehe auch SO Regex FAQ ; Bitte lassen Sie mich wissen, wenn es fehlschlägt.
quelle
Fand diese reg ex hier
Dies validiert das Format
mm/dd/yyyy
und die gültigen Daten korrekt (aber nichtm/d/yyyy
).Einige Tests
quelle
wird jedes Datum zwischen validieren
1900-2099
quelle
Der folgende Ausdruck ist nett und leicht zu manipulieren:
Es wird gemäß dem Format MM / TT / JJJJ validiert und ermöglicht die Unterstützung von Schaltjahren von 1960 bis 2016. Wenn Sie die erweiterte Unterstützung für Schaltjahre benötigen, müssen Sie nur diesen Teil des Ausdrucks bearbeiten:
Hoffe das hat dir sehr geholfen
quelle
Eine andere Antwort, die den Tag (TT) in Abhängigkeit vom Monat (MM) und dem Jahr (JJJJ) validiert (dh auch den 29. Februar in Schaltjahren validiert) und Jahre im Bereich von 0001 bis 9999 (0000 in einem ungültigen Jahr nach Gregorianisch) zulässt Kalender)
quelle
Ich arbeite mit einer API, die nur das Format MM / TT / JJJJ akzeptiert. Ich konnte keinen anderen Beitrag finden, der so gut sprang wie Ofirs Antwort , also habe ich ihn optimiert und poste ihn hier erneut für alle, die ihn benötigen könnten.
quelle
validiert das
MM/DD/YYYY
Format mit1960
bis2028
Wenn Sie die Schaltjahrunterstützung verlängern müssen, fügen Sie hinzu
Das ist auch Arbeit
Wenn Sie das Format ändern können,
mm-dd-yyyy
ersetzen Sie es, um[/]
es[-]
auch online zu überprüfen. http://regexr.com/quelle
Für das Datum MM / TT / JJJJ können Sie verwenden
Es überprüft die richtigen Tage und Motten.
Denken Sie daran, dass Sie Ihren regulären Ausdruck unter überprüfen können
regex101
was ich empfehle :)
Habe Spaß!
quelle
Diese Regex validiert Daten im Format:
12-30-2016 (MM-TT-JJJJ) oder 12-3-2016 (MM-TT-JJJJ) oder 1-3-2016 (MD-JJJJ) oder 1-30-2016 (MM-TT-JJJJ)
quelle
Ich weiß, dass es eine tangentiale Antwort auf die Frage ist, aber wenn die Absicht der Frage lautet: "Wie validiere ich ein Datum?", Warum dann nicht versuchen, die Programmiersprache die ganze harte Arbeit machen zu lassen (wenn Sie eine Sprache verwenden, die dies tut?) können)?
zB in php
quelle