110 votes

Expression régulière pour tester la validité de l'année

Compte tenu d'une valeur que je veux valider pour vérifier si il est valable un an. Mes critères sont simples où la valeur doit être un nombre entier avec 4 caractères. Je sais que ce n'est pas la meilleure solution, diable il l'habitude de permettre d'années avant d' 1000 et permettra d'années comme l' 5000. Mais ce critère est suffisant pour mon scénario.

Ce que j'ai trouvé est

\d{4}$

Bien que cela a fonctionné, j'ai juste compris que cela permet pour les valeurs négatives ainsi.

Comment puis-je m'assurer que seuls les nombres entiers positifs sont-ils autorisés?

P. S: je suis complètement débutant à RegEx :)

215voto

r92 Points 1021

Ans, de 1000 à 2999

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

Pour 1900-2099

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

95voto

codaddict Points 154968

Vous avez besoin d'ajouter un début d'ancrage ^ comme:

^\d{4}$

Votre regex \d{4}$ correspondra à des chaînes qui se terminent par 4 chiffres. De sorte que l'entrée comme -1234 sera acceptée.

En ajoutant le début de l'ancre vous correspondent seulement les chaînes qui commencent et finissent avec 4 chiffres, ce qui signifie qu'ils doivent contenir que 4 chiffres.

22voto

sferik Points 561

Le "accepté" la réponse à cette question est à la fois incorrect et myope.

Il est inexact en ce qu'elle correspond à des chaînes de caractères comme 0001, ce qui n'est pas valable un an.

Il est myope dans le fait qu'elle ne correspond à aucune des valeurs au-dessus de 9999. Avons-nous déjà oublié les leçons de Y2K? Au lieu de cela, utiliser l'expression régulière:

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

Si vous avez besoin de faire correspondre années dans le passé, en plus des années dans le futur, vous pouvez utiliser cette expression régulière pour correspondre à n'importe quel entier positif:

^[1-9]\d*$

Même si vous ne vous attendez pas les dates du passé, vous souhaiterez peut-être utiliser cette expression régulière de toute façon, juste au cas où quelqu'un invente une machine de temps et veut prendre votre logiciel avec eux.

Remarque: Cette expression régulière correspond à tous les ans, y compris ceux d'avant l'an 1, car ils sont généralement représentés avec un BC désignation au lieu d'un entier négatif. Bien sûr, cette convention pourrait changer au cours des prochains millénaires, donc votre meilleure option est de faire correspondre un nombre entier positif ou négatif, avec l'expression régulière suivante:

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

6voto

Renaud Points 3226

Bâtiment sur @r92 réponse, pour les années 1970-2019:

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

1voto

PierrOz Points 2679

vous pouvez aller avec qqch comme [^-]\d{4}$:- vous que le signe" - avant votre à 4 chiffres.
vous pouvez également utiliser ^\d{4}$ avec ^ pour attraper le début de la chaîne. Cela dépend de votre scénario, en fait...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X