Bei einem bestimmten Wert möchte ich ihn validieren, um zu überprüfen, ob es sich um ein gültiges Jahr handelt. Meine Kriterien sind einfach, wenn der Wert eine Ganzzahl mit 4
Zeichen sein soll. Ich weiß, dass dies nicht die beste Lösung ist, da es Jahre zuvor nicht zulässt 1000
und Jahre wie z 5000
. Dieses Kriterium ist für mein aktuelles Szenario ausreichend.
Was ich mir ausgedacht habe ist
\d{4}$
Während dies funktioniert, sind auch negative Werte zulässig.
Wie stelle ich sicher, dass nur positive ganze Zahlen zulässig sind?
regex
string
validation
string-matching
Ranhiru Jude Cooray
quelle
quelle
Antworten:
Sie müssen einen Startanker hinzufügen
^
als:Ihre Regex stimmt
\d{4}$
mit Zeichenfolgen überein , die mit 4 Ziffern enden . Eingaben wie-1234
werden also akzeptiert.Wenn Sie den Startanker hinzufügen, stimmen Sie nur mit den Zeichenfolgen überein, die mit 4 Ziffern beginnen und enden. Dies bedeutet effektiv, dass sie nur 4 Ziffern enthalten dürfen.
quelle
whateverblahblah2323
. Jetzt verstehe ich, warum ein wenig Lernen gefährlich ist: O10000
wäre das Akzeptieren ein Fehler.Jahre von 1000 bis 2999
Für 1900-2099
quelle
^(?:19|20)\d{2}$
(19|20)\d{2}
meinen regulären Ausdruck hinzufügen , um ein Geburtsdatum zu validieren? Dies ist meine Regex/^[0-9]{1,2}\/(0[1-9])|(1[0-2])\/[0-9]{4}$/
Ich möchte sicherstellen, dass das Jahr immer 4-stellig ist und mit 19 ** oder 20 ** beginntDie "akzeptierte" Antwort auf diese Frage ist sowohl falsch als auch kurzsichtig.
Es ist insofern falsch, als es mit Zeichenfolgen wie übereinstimmt
0001
, was kein gültiges Jahr ist.Es ist kurzsichtig, dass es nicht alle Werte über 9999. Have passen wir die Lehren aus bereits vergessen Y2K ? Verwenden Sie stattdessen den regulären Ausdruck:
Wenn Sie Jahre in der Vergangenheit und Jahre in der Zukunft abgleichen müssen, können Sie diesen regulären Ausdruck verwenden, um eine beliebige positive Ganzzahl abzugleichen:
Auch wenn Sie keine Daten aus der Vergangenheit erwarten, möchten Sie diesen regulären Ausdruck möglicherweise trotzdem verwenden, nur für den Fall, dass jemand eine Zeitmaschine erfindet und Ihre Software mitnehmen möchte.
Hinweis: Dieser reguläre Ausdruck stimmt mit allen Jahren überein, einschließlich denen vor dem Jahr 1, da sie normalerweise mit einer BC-Bezeichnung anstelle einer negativen Ganzzahl dargestellt werden. Natürlich könnte sich diese Konvention in den nächsten Jahrtausenden ändern. Daher ist es am besten, eine beliebige Ganzzahl - positiv oder negativ - mit dem folgenden regulären Ausdruck abzugleichen:
quelle
Dies funktioniert für 1900 bis 2099:
quelle
Aufbauend auf der Antwort von @ r92 für die Jahre 1970-2019:
quelle
197999
19[789]\d\d\d
würde erlauben197999
/(19[789]\d|20[01]\d)/.test(1970324) >> true
1970
) übereinstimmen , nicht mit den letzten 3. Was ist mit(19[789]\d|20[01]\d)[^0-9]
? Das würde1970 324
aber nicht passen1970324
Sie können mit etw wie [
^-]\d{4}$
: Sie verhindern, dass das Minuszeichen-
vor Ihren 4 Ziffern steht.Sie können auch
^\d{4}$
mit verwenden^
, um den Anfang der Zeichenfolge abzufangen. Es hängt tatsächlich von Ihrem Szenario ab ...quelle
Um ein Jahr in einer Zeichenfolge zu testen, die neben dem Jahr andere Wörter enthält, können Sie den folgenden regulären Ausdruck verwenden: \ b \ d {4} \ b
quelle
Theoretisch ist die 4-stellige Option richtig. In der Praxis ist es jedoch möglicherweise besser, eine Reichweite von 1900 bis 2099 zu haben.
Außerdem muss es sich um eine nicht erfassende Gruppe handeln. In vielen Kommentaren und Antworten wird vorgeschlagen, eine Gruppierung zu erfassen, die meiner Meinung nach nicht richtig ist. Denn zum Abgleichen könnte es funktionieren, aber zum Extrahieren von Übereinstimmungen mit Regex werden 4-stellige Zahlen und zweistellige (19 und 20) Zahlen auch aufgrund von Klammern extrahiert.
Dies funktioniert für eine genaue Übereinstimmung mit nicht erfassenden Gruppen:
(?:19|20)\d{2}
quelle
Verwenden;
seit Jahren 1900 - 9999.
Ab 9999 müssen Sie sich keine Sorgen mehr machen - bis dahin wird AI die gesamte Programmierung durchführen !!! Hehehehe
Sie können Ihre Regex unter https://regex101.com/ testen.
Weitere Informationen zu nicht erfassenden Gruppen (in einem der obigen Kommentare erwähnt) finden Sie hier http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm
quelle
Sie können Ihre Ganzzahl in eine Zeichenfolge konvertieren. Da das Minuszeichen nicht mit den Ziffern übereinstimmt, haben Sie keine negativen Jahre.
quelle
Ich benutze diesen regulären Ausdruck in Java
^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$
Werke von 1900 bis 9999
quelle
/ ^ \ d {4} $ / Hiermit wird geprüft, ob eine Zeichenfolge nur aus 4 Zahlen besteht. In diesem Szenario können Sie zur Eingabe eines Jahres 989 stattdessen 0989 angeben.
quelle
Wenn Sie mit JJJJ oder JJJJMMTT übereinstimmen müssen, können Sie Folgendes verwenden:
quelle
Sie können diesen auch verwenden.
quelle
00/00/2000
oder31/02/1999
und vielen weiteren falschen Daten überein .(0[1-9]|1[0-2])
ist ein viel besserer Ausdruck für den Monat