im essayant de vérifier un inputfield avec une expression régulière. L'utilisateur peut entrer un numéro à 10 chiffres pouvant contenir un tiret sur la position 3,4 ou 5. Lorsque j'utilise une seule expression, cela fonctionne, mais je ne peux pas l'obtenir pour travailler avec des déclarations ou des déclarations. Offense ce serait une solution pour couper tous les tirets, mais je voudrais le faire de cette façon.
Exemples qui doivent être autorisés P>
(^d{10}$)|
(^d{2}\-d{8}$)|
(^d{3}\-d{7}$)|
(^d{4}\-d{6}$)
3 Réponses :
Vous avez juste oublié de mettre les backs-backslashes devant le D. Cette regex devrait le faire:
(^\d{10}$)|(^\d{2}\-\d{8}$)|(^\d{3}\-\d{7}$)|(^\d{4}\-\d{6}$)
S'il vous plaît drapeau / voter pour fermer les questions causées par des fautes de frappe - elles sont hors tension et n'ont aucune chance d'être de valeur pour les futurs lecteurs
Une version plus courte de la rédaction de la regex serait (^ \ d {10} $) | (^ \ d {2,4} \ - \ d + $) code>
Cela correspondrait au 0123-4567890123456 code>
@Certeperformance: thx pour l'entrée, corrigé que: (^ \ d {10} $) | (^ \ d {2,4} \ - \ d {6,8} $) code>
Qui correspondra au 01-234567 code>
Votre deuxième regex devrait utiliser un lookahead ^ \ d {10} $ | ^ (? = [\ D -] {11} $) \ d {2,4} \ - \ d + $ code>
@revo: C'est la version la plus élégante postée ici, merci. Cela devrait être la solution à mon avis.
Vous pouvez même retirer le premier côté de l'alternance: ^ (? = (\ D * \ d) {10} $) \ d {2,4} --? \ d + $ code>
Essayez ce motif Il utilise un lookahead positif: Cela garantit que vous aurez du tiret au 2e, 3ème, 4ème position. P>
Si cela est satisfait, que correspondance: Demo P>
Cette alternance est satisfaite - si elle est satisfaite, elle correspond à des chiffres avec DASH, si je ne le casse pas, il correspond à la motif (? = \ d {2,4} - \ d {6,8}) ^ [\ d -] {11} $ code> p> P>
(? = \ d {2,4} - \ d {6,8} - \ d {6,8}) code> pour assurer que ce qui suit est: P>
\ d {2,4} code> - 2 jusqu'à 4 chiffres p>
- code> - Dash littéralement p>
\ d {6,8} code> - 6 à 8 chiffres p>
^ code> - début d'une chaîne, [\ d -] {11} code> - onze caractères (chiffres ou tiret), < Code> $ code> - fin d'une chaîne p>
(? (? = \ d {2,4} - \ D {6,8}) ^ [\ d -] {11} $ | ^ ^ D {10} $) code> p>
^ \ d {10} $ code>, qui correspond à dix chiffres seulement. p>
Avez-vous utilisé le cluster conditionnel (? (...) ... code> exprès?
@revo Oui, afin de correspondre à différents modèles basés sur le résultat de Lookahead.
Même tous les moteurs populaires ne soutiennent pas les conditionnels et nous ne sommes pas au courant de ce que l'utilisation de la saveur de Regex utilise. Et ici, vous n'avez pas besoin de conditionnels du tout (? = \ D {2,4} - \ d {6,8}) ^ [\ d -] {11} $ | ^ \ d {10} $ $ code> fonctionne bien.
Vous pouvez utiliser cette regex avec un lookahead et Alternationn: Détails du regex: strong> p> Comme Revo suggéré ci-dessous une version plus courte peut être: p>
^ (?: code>: Commencez par un groupe non capturant
\ d {10} code>: correspond à tous les 10 chiffres li>
| code>: ou li>
(? = [\ d -] {11} $) code>: Assurez-vous que la longueur totale est 11 incluant - li> li>
\ d {2,4} - \ d + code>: Assurez-vous que - code> est à 3ème, 4ème ou 5e positions Li>
ul> li>
) $ code>: fin de groupe non capturant à la fin li>
ul>
C'est la réponse courte la plus lisible. +1. Mes deux cents pour une expression plus courte ^ (? = (?: - -? \ D) {10} $) \ D {2,4} -? \ D + $ code>
Merci@revo: ^ (? = (?: - -? \ D) {10} $) \ d {2,4} --? \ d + $ code> est vraiment plus court qu'il faut presque 4 fois plus de plus pas. Mais op doit utiliser cette version plus courte si elle n'utilise pas RegEx sur un grand ensemble d'entrées.
Dans quel langage de programmation vous travaillez?
Vous avez oublié d'échapper au
d code> s.d code> correspond au caractère littérald code>. Pour correspondre à un chiffre, utilisez\ d code>. Corrigez cela et votre modèle fonctionne.^ (?: \ d {10} | \ d {2} - \ d {8} | \ d {3} - \ d {7} | \ d {4} - \ D {6}) $ code>