Regex pour correspondre à 2 chiffres, décimal facultatif, deux chiffres
J'ai passé une demi-heure à essayer d'obtenir ceci, peut-être que quelqu'un peut le trouver rapidement.
J'ai besoin d'une expression régulière qui correspondra à un ou deux chiffres, suivie d'un point décmial facultatif, suivi d'un ou deux chiffres.
Par exemple, il devrait correspondre à ces chaînes dans leur intégralité:
3
33
.3
.33
33.3
33.33
Et ne correspond à rien avec plus de 2 chiffres avant ou après le decmial point.
9 réponses
EDIT: modifié pour s'adapter à d'autres commentaires.
J'ai compris que vous vouliez dire que s'il n'y a pas de point décimal, il ne devrait pas y avoir deux chiffres de plus. Donc, cela devrait être:
\d{0,2}(\.\d{1,2})?
Cela devrait faire l'affaire dans la plupart des implémentations. Sinon, vous pouvez utiliser:
[0-9]?[0-9]?(\.[0-9][0-9]?)?
Et cela devrait fonctionner sur toutes les implémentations que j'ai vues.
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])
Correspond:
- Vos exemples
- 33.
Ne correspond pas:
- 333.33
- 33.333
Pour construire sur la réponse de Lee, vous devez ancrer l'expression pour satisfaire à l'exigence de ne pas avoir plus de 2 nombres avant la décimale.
Si chaque nombre est une chaîne distincte, vous pouvez utiliser les ancres de chaîne :
^\d{0,2}(\.\d{1,2})?$
Si chaque nombre est dans une chaîne, vous pouvez utiliser les ancres de mots :
\b\d{0,2}(\.\d{1,2})?\b
Vous avez mentionné que vous voulez que l'expression rationnelle corresponde à chacune de ces chaînes, mais vous avez déjà mentionné que le chiffre 1-2 est avant la décimale?
Cela correspondra à 1-2 chiffres suivis d'une décimale possible, suivie d'un autre 1-2 chiffres mais échouera sur votre exemple de .33
\d{1,2}\.?\d{1,2}
Cela correspondra à 0-2 chiffres suivis d'un deciaml possible, suivi d'un autre 1-2 chiffres et correspondra à votre exemple de .33
\d{0,2}\.?\d{1,2}
Je ne sais pas exactement lequel vous cherchez.
^(\d{0,2}\\.)?\d{1,2}$
\d{1,2}$
correspond à un nombre de 1-2 chiffres avec rien après (3
, 33
, etc.), (\d{0,2}\.)?
correspond éventuellement à un nombre de 0 à 2 chiffres suivi d'un point (3.
, 44.
, .
, etc.). Mettez-les ensemble et vous avez votre regex.
Suivant est une très bonne expression régulière pour deux chiffres et deux points décimaux.
[RegularExpression(@"\d{0,2}(\.\d{1,2})?", ErrorMessage = "{0} must be a Decimal Number.")]