119 Stimmen

Abgleich mit regulären Ausdrücken, um auf ein gültiges Jahr zu prüfen

Ich möchte einen Wert validieren, um zu prüfen, ob es sich um ein gültiges Jahr handelt. Meine Kriterien sind einfach: Der Wert sollte eine Ganzzahl mit 4 Zeichen. Ich weiß, dass dies nicht die beste Lösung ist, da es nicht möglich sein wird, Jahre vor 1000 und ermöglicht Jahre wie 5000 . Diese Kriterien sind für mein derzeitiges Szenario angemessen.

Ich habe mir Folgendes ausgedacht

\d{4}$

Dies funktioniert zwar, erlaubt aber auch negative Werte.

Wie kann ich sicherstellen, dass nur positive ganze Zahlen zulässig sind?

229voto

r92 Punkte 2600

Jahre von 1000 bis 2999

^[12][0-9]{3}$

Für 1900-2099

^(19|20)\d{2}$

100voto

codaddict Punkte 426877

Sie müssen einen Startanker hinzufügen ^ als:

^\d{4}$

Ihre Regex \d{4}$ passt zu Zeichenketten die mit 4 Ziffern enden . Also Eingabe wie -1234 werden akzeptiert.

Durch Hinzufügen des Startankers stimmen Sie nur mit den Zeichenfolgen überein, die Anfang und Ende mit 4 Ziffern, was bedeutet, dass sie nur 4 Ziffern enthalten dürfen.

22voto

sferik Punkte 1697

Die "akzeptierte" Antwort auf diese Frage ist sowohl falsch als auch kurzsichtig.

Er ist insofern nicht korrekt, als dass er auf Zeichenfolgen wie 0001 was kein gültiges Jahr ist.

Sie ist kurzsichtig, denn sie wird pas alle Werte über 9999 übereinstimmen. Haben wir schon die Lektionen von JAHR-2000-PROBLEM ? Verwenden Sie stattdessen den regulären Ausdruck:

^[1-9]\d{3,}$

Wenn Sie nicht nur Jahre in der Zukunft, sondern auch Jahre in der Vergangenheit abgleichen müssen, können Sie diesen regulären Ausdruck verwenden, um jede positive ganze Zahl abzugleichen:

^[1-9]\d*$

Auch wenn Sie keine Daten aus der Vergangenheit erwarten, sollten Sie diesen regulären Ausdruck trotzdem verwenden, nur für den Fall, dass jemand eine Zeitmaschine erfindet und Ihre Software mit zurücknehmen möchte.

Hinweis: Dieser reguläre Ausdruck passt auf alle Jahre, auch auf die vor dem Jahr 1, da diese üblicherweise mit einer BC-Bezeichnung und nicht mit einer negativen ganzen Zahl dargestellt werden. Natürlich könnte sich diese Konvention in den nächsten Jahrtausenden ändern. Daher ist es am besten, wenn Sie jede ganze Zahl - ob positiv oder negativ - mit dem folgenden regulären Ausdruck abgleichen:

^-?[1-9]\d*$

13voto

jonschlinkert Punkte 10613

Dies gilt für die Jahre 1900 bis 2099:

/(?:(?:19|20)[0-9]{2})/

6voto

Renaud Punkte 15064

Aufbauend auf der Antwort von @r92, für die Jahre 1970-2019:

(19[789]\d|20[01]\d)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X