web-dev-qa-db-fra.com

Vérification d'une gamme de nombres avec des expressions régulières

J'utilise une expression régulière pour valider un certain format dans une chaîne. Cette chaîne deviendra une règle pour un jeu.

Exemple: "DX 3" est correct selon la règle, mais "DX 14" pourrait être ok aussi ... Je sais comment regarder la chaîne et trouver un ou plusieurs "chiffres", donc le problème est que la regex Match 34 aussi, et ce nombre est sorti de "gamme" pour la règle ...

Est-ce que je manque quelque chose sur la regex pour faire cela? Ou n'est-ce pas possible du tout?

18
mrs1986

Malheureusement, il n'y a pas de moyen facile de définir les gammes dans Regex. Si vous souhaitez utiliser la plage 1-23, vous vous retrouverez avec une regex comme celle-ci:

([1-9]|1[0-9]|2[0-3])

Explication:

  1. Soit la valeur est 1-9
  2. ou la valeur commence par 1 et est suivie avec un 0-9
  3. ou la valeur commence par 2 et est suivie avec un 0-3
38
Marcus

Ce n'est pas si court et pas flexible.

Si vous recherchez 1 à 19, vous pouvez rechercher "DX 1? [0-9]", par exemple, mais s'il ne se termine pas à une limite numérique, il obtient la vilaine jolie et la modification des règles n'est pas souple.

Sépartir la chaîne en blanc, puis utiliser X> 0 et X <24 est préférable à comprendre et plus flexible.

3
user unknown

Vous pouvez utiliser le format suivant pour écrire une expression régulière résolvant votre problème. Supposons que votre gamme soit 0-15.

"^DX [0-9]|1[0-5]$" 

Vous pouvez même le rendre dynamique en fonction de votre gamme en ajoutant des chaînes.

1
Puneet