web-dev-qa-db-fra.com

Comment valider la plage 1-99 en utilisant une regex?

Je dois valider certaines entrées d'utilisateur, afin de m'assurer que le nombre entré est compris entre 1 et 99 inclus. Celles-ci doivent être des valeurs entières (Integer)

Le précédent 0 est autorisé, mais facultatif

Valeurs valides

  1. 1
  2. 01
  3. dix
  4. 99
  5. 09

Valeurs invalides

  1. 007
  2. 100
  3. 10.5
  4. 010

Jusqu'à présent, j'ai la regex suivante que j'ai élaborée: ^0?([1-9][0-9])$

Cela autorise un 0 optionnel au début, mais n'est pas correct à 100% car 1 n'est pas considéré comme valide

Des améliorations/suggestions?

17
Jimmy

De mémoire (non validé)

^(0?[1-9]|[1-9][0-9])$

25

Voici:

^(\d?[1-9]|[1-9]0)$

Cela signifie que vous autorisez l’un des deux

  1. 1 au 9 ou 01 au 09, 11 au 19, 21 au 29, ..., 91 à 99
  2. 10, 20, ..., 90
14
Alin Purcaru

Pourquoi la regex est-elle une exigence? Ce n'est pas idéal pour les calculs de plage numérique.

Apache commons a IntegerValidator avec les éléments suivants:

isInRange(value, 1, 99)

De plus, si vous utilisez Spring, Struts, Wicket, Hibernate, etc., vous avez déjà accès à un validateur de plage. Ne réinventez pas la roue avec les expressions régulières.

5
Mark Thomas
^(([0-9][1-9])|([1-9][0-9])|[1-9])$

devrait marcher

4
red-X

assez tard, mais cela fonctionnera.

^[1-9][0-9]?$
1
Faheem Alam

Je pense que ça devrait être comme ...

^(0[1-9]|[1-9][0-9])$
0
Yunus Usmani

Celui-ci a fonctionné pour moi-même:

([1-9][0-9])|(0?[1-9])

Il vérifie 10-99 ou 1-9 => 1-99 Avec un zéro au début autorisé

0
Androbin