2011-10-25 5 views
1

Un collègue utilise une application qui utilise des expressions régulières pour valider les champs de saisie de données.caractères non répétitifs regex

Il doit permettre aux utilisateurs de choisir parmi les chiffres 1-9.

-à-dire 1, 2, 3, ..., 12, 13, ..., 23, 24, ..., ..., 123456789

L'évidence de base [1-9] {1 , 9} n'interdirait pas les chiffres répétés ou n'appliquerait pas l'ordre numérique.

Un chiffre ne peut pas être répété (interdire 11, 343, etc.) et il doit être dans l'ordre numérique (interdire 21, 164, etc.).

À court de faire correspondre les 320 possibilités séparément "(1 | 2 | 3 | ... | 12 | 13 | ...)", comment puis-je y parvenir?

Répondre

8
^1?2?3?4?5?6?7?8?9?$ 

Celui-ci?

Il est clair que l'utilisateur peut insérer jusqu'à 9 chiffres (123456789) et il peut commencer à partir de n'importe lequel. Tout chiffre est facultatif, mais la commande est fixe.

Si vous voulez un chiffre est nécessaire, utilisez un regard vers l'avenir

^(?=[1-9])1?2?3?4?5?6?7?8?9?$ 

ou regarder derrière

^1?2?3?4?5?6?7?8?9?(?<=[1-9])$ 

ou regard négatif avant

^(?!$)1?2?3?4?5?6?7?8?9?$ 

ou regard négatif derrière

^1?2?3?4?5?6?7?8?9?(?<!^)$ 

donc au moins un chiffre est nécessaire

Si votre langue regex ne pas discontinues effectuées look (et regarder behinds) vous pouvez faire:

^12?3?4?5?6?7?8?9?|23?4?5?6?7?8?9?|34?5?6?7?8?9?|45?6?7?8?9?|56?7?8?9?|67?8?9?|78?9?|89?|9)$ 

maintenant le premier chiffre « branches » à la combinaison "valide" des chiffres facultatifs suivants.

+0

Ce n'est pas trop minable, sauf qu'il correspond à '" "' :-) Cela pourrait être corrigé avec une contrainte 'longueur> 0'. – paxdiablo

+0

@paxdiablo J'ajoutais déjà la variante – xanatos

+0

+1 belle et courte solution! – hochl

Questions connexes