Javascript conditionnelle expression régulière si-alors-sinon
J'essaie de limiter les entrées à un format spécifique.
Si l'entrée a 5500 ou 5100 comme 01\01-5500-000-00 alors je veux:
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$
Mais si l'entrée a rien d'autre que de 5500 ou 5100 je veux:
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$
Comment cela peut-il être accompli avec le si d'autre idée?
- Quelle langue utilisez-vous? Qu'avez-vous essayé?
^[0-9]{2,}\\[0-9]{2}-5[15]00-[0-9]{3}-$|^[0-9]{2,}\\[0-9]{2}-(?!5[15]00)[0-9]{4}-[0-9]{3}-[0-9]{2}$
- J'ai utilisé webtoolkitonline.com/regular-expression-tester.html pour m'aider à créer correctement l'expression. Et j'ai essayé d'utiliser le tuyau avec 5500 entre parenthèses comme ceci: (?=.*5500)|^[0-9]{2,}\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$ - pas correct
- Cet outil prend en charge uniquement JS que je peux voir. Mais il est encore possible.
- Par la voie,
01\01-5500-000-00
ne correspond pas à votre premier modèle. est-il censé à l'échec? Aussi, est la fuite"-"
dans le premier modèle intentionnel?
Vous devez vous connecter pour publier un commentaire.
Conditionnelle syntaxe regex n'est pas pris en charge par JavaScript moteur d'expressions régulières, mais il peut être contourné avec une non-capture d'un groupe contenant 2 alternatives:
Un positif "look-ahead" et
La seconde avec le inversée, négatif look-ahead.
Cette expression répond à vos critères et JavaScript compatible:
Voir regex démo
Permettez-moi de le décomposer:
^
- Début de la chaîne de(?:
(?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-
- Première alternative avec le(?=.*\b5[15]00\b)
"look-ahead" qui nécessite un mot entier5500
ou5100
à l'intérieur de la chaîne, et le premier modèle que vous avez|
- alternance opérateur(?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2})
- Deuxième alternative qui est ajouté au début de la(?!.*\b5[15]00\b)
négatif "look-ahead" qui fait en sorte de ne pas5100
ou5500
à l'intérieur de la chaîne, et alors seulement correspond à votre deuxième motif.$
- la fin de la chaîne.Utilisation conditions, par exemple:
(?(?=regex)then|else):
[0-9]{2,}\\[0-9]{2}\-(?(?=5[15]00)[0-9]{4}\-[0-9]{3}\-|[0-9]{4}\-[0-9]{3}\-[0-9]{2})
Regex conditionnelles exemple: [email protected]
Dans le cas où vous êtes à l'aide d'une regex moteur qui n'est pas PCRE, vous pouvez être en mesure d'imiter la fonctionnalité en procédant de la manière suivante:
Par exemple.
Imiter regex conditionnelles exemple: [email protected]
Remplacer cette partie du motif
[0-9]{4}
avec les valeurs littérales pour 5100/5500:[0-9]
est la même chose que\d
en JavaScript(?!5[15]00)\d{4}
pour garantir ce n'est pas 5100/5500.