Ich brauche Hilfe bei der Erstellung einer Regex, um sicherzustellen, dass der Benutzer ein gültiges Datum eingibt
Die Zeichenfolge hat das Format mm/dd/yyyy
Hier ist, was ich bisher herausgefunden habe.
%Vor%Ich habe die Regex validiert, wo der Benutzer keinen Tag höher als 12 eingeben kann und die Jahre mit "19" oder "20" beginnen müssen. Was ich habe Schwierigkeiten ist herauszufinden, eine Logik für die Validierung des Tages. Der Tag sollte nicht über 31 gehen.
Andere Lösungen sind in Ordnung, wahrscheinlich arbeiten, usw. Normalerweise wollen Sie ein bisschen mehr tun, und dann ein bisschen mehr, und schließlich haben Sie einige verrückte Code und Schaltjahre, und warum machst du es selbst wieder?
DateTime und seine Formatierer sind Ihre Lösung. Benutze sie! Manchmal sind sie ein wenig übertrieben, aber oft klappt das für dich auf der Straße.
%Vor% $foo
ist jetzt ein DateTime-Objekt. Genießen.
Wenn Ihre Datumszeichenfolge nicht korrekt formatiert wurde, wird $foo
"undef"
und $dayFormat->errstr
wird Ihnen sagen warum.
01-31
, dann ist RegEx in Ordnung, solange es eine Backend-Logik gibt, die das Datum als Ganzes validiert gewünscht. Ich sehe, dass die erwartete Antwort derzeit für 10, 20 fehlschlägt.
gawk 'BEGIN{ for(i=0;i<=32;i++){ if (i ~ /^([0-2]?[1-9]|3[01])$/){print i " yes"}else {print i " no"} } }
^([0-2]?[1-9]|3[01]|10|20)$
Bitte betrachten Sie die folgende Lösung ...
1. Identifizieren Sie die Mengen, die abgeglichen werden müssen:
{01,...,09},{10,...,31}
{10,...,31}
kann in => {10,...,29},{30,31}
aufgeteilt werden
{1,...,31} => {1,...,9},{10,...,31}
2. Entsprechende reguläre Ausdrücke für jede Untergruppe:
%Vor% Jetzt können wir ([0][1-9])
und ([1-9])
zusammen als ([0]?[1-9])
gruppieren. Wobei ?
0 oder 1 Vorkommen des Musters / Symbols bedeutet. [UPDATE] - Vielen Dank @MattFrear, dass Sie darauf hingewiesen haben.
Die resultierende RegEx ist also: ^(([0]?[1-9])|([1-2][0-9])|(3[01]))$
Getestet hier: Ссылка [UPDATE]
Von Ausdrücken in der Kategorie: Datum und Uhrzeit
Validiert die korrekte Anzahl der Tage in einem Monat, sieht so aus, als ob es sogar Schaltjahre behandelt.
Sie können natürlich [\.\-/]
mit /
so ändern, dass nur Schrägstriche zulässig sind.
Tags und Links regex perl validation date