2 votes

Regex pour une permutation d'exactement 7 chiffres et 2 traits d'union, sans 2 traits d'union consécutifs

Je cherche une Regex pour faire correspondre une chaîne de caractères qui devrait :

  • commencent par un chiffre
  • entre" ont une permutation d'exactement 7 chiffres et 2 traits d'union, sans 2 traits d'union consécutifs.
  • se terminent par une séquence de chiffres, de traits d'union, de chiffres

Match :

  • 01-234-5678-9
  • 01234-56-78-9
  • 0123-4-5678-9
  • 012-345-678-9
  • 01-234567-8-9
  • 01-234-5678-9
  • 0-12345-678-9
  • 0-123-45678-9
  • 0-123-45678-9
  • 01-23456-78-9
  • 0-123456-78-9
  • 0-1234567-8-9

Pas de correspondance :

  • 01-234-56789-0
  • 01-234-567-8
  • 01--2345678-9
  • 01-2345678--9
  • 0-1-23456789
  • -01-2345678-9

Pour l'instant, je n'ai pas réussi à trouver comment faire correspondre les 2 traits d'union intermédiaires : ^\d\d{7}\d-\d$

EDIT : Grâce aux réponses que j'ai eues à cette question, j'ai pu l'élargir à cette autre question. question concernant l'ISBN-10 et l'ISBN-13...

4voto

The fourth bird Points 40138

Vous pouvez assigner 7 chiffres et le digit - digit à la fin.

Pour la correspondance, il doit y avoir au moins un chiffre avant et après le trait d'union afin d'éviter les traits d'union consécutifs.

^\d(?=(?:-?\d){7}-?\d-\d$)\d*-\d+-\d*\d-\d$

  • ^ Début de la chaîne
  • \d Faire correspondre un seul chiffre
  • (?= Prévision positive
    • (?:-?\d){7} Correspondre à 7 chiffres séparés par un -
    • -?\d-\d$ Faire correspondre une option - et le \d-\d$ à la fin
  • ) Fermer le lookahead
  • \d*-\d+-\d*\d-\d Correspondre aux formats possibles lorsque tous les traits d'union sont séparés par au moins un chiffre.
  • $ Fin de la chaîne

Démonstration des expressions rationnelles

2voto

JvdV Points 16691

Mes deux cents :

^(?=.{11}-\d$)(?:\d+-){3}\d

Voir le site en ligne démo

  • ^ - Ancrage de la chaîne de départ.
  • (?= - Regard positif ouvert :
    • .{11}-\d$ - Tout caractère autre que la nouvelle ligne 11 fois suivi d'un trait d'union, d'un seul chiffre et de l'ancre de fin de chaîne.
    • ) - Fermer l'horizon positif.
  • (?: - Groupe ouvert sans capture :
    • \d+- - 1+ chiffre suivi d'un trait d'union.
    • ){3} - Fermer le groupe de non-capture et faire correspondre trois fois.
  • \d - Faire correspondre un seul chiffre.

Je suppose qu'alternativement, même ^(?=.{13}$)(?:\d+-){3}\d$ fonctionnerait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X