2011-11-18 2 views
0

J'ai un champ de texte que je dois valider en utilisant une regex. Mon exigence est la suivante:Une expression régulière qui correspond à 25 caractères et commence par des chiffres

CCCCNNNNNN ou CCCCNNNNNNN (modèle)

1234ABCDEFG ou 123-ABCDEFG (Exemple string)

Règles:

  • La chaîne complète est de 25 caractères maximum
  • Le premier ur caractères (CCCC) doivent être alphanumériques
  • CCCC est de 4 caractères exactement et peuvent être des chiffres ou numéro
  • CCCC peut avoir un signe de tableau de bord comme 4ème personnage
  • NNNNNNNNNNNN peut être jusqu'à 21 caractères et des chiffres

Par exemple AAAA1234A58- est une chaîne valide pour CCCC.

Voici mes notes de recherche:

  • je vais devoir correspondre numerics premier
  • je besoin du + char à préciser en fonction de ce modèle X fois
  • je besoin de faire correspondre les lettres après que pour 8-9 places

Il y a un poste merveilleux sur les modèles RegEx ici:

Matching numbers with regular expressions — only digits and commas

Mon objectif est d'appliquer ce modèle REGEX à un masque de zone de texte dans une application WinForms.

+0

J'ai supprimé ma réponse - s'il vous plaît revenir en arrière et écrire une question sensible. – ObscureRobot

+0

Donc désolé, j'ai clarifié mes exigences. J'espère que cela donne une idée plus claire de ce dont j'ai besoin. – nocarrier

+0

pas tout à fait: pour moi, «les quatre premiers caractères (CCCC) doivent être alphanumériques» signifie soit «ABCD» ou «1234» et l'exigence «NNNNNNNNNNNNN peut être jusqu'à 21 caractères et seuls les chiffres» est en conflit avec votre exemple «1234ABCDEFG» . alors, qu'est-ce que 'je vais devoir faire correspondre les lettres après cela pour 8-9 espaces' signifie, exactement? –

Répondre

3

....

....

...Oui - Je pense que la réponse que vous recherchez (et je souligne "pense") est cette expression:

^[0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}$ 

des thats:

^    # assert beginning (not in the middle) 
[0-9A-Za-z]{3} # three characters that are: 0-9 or a-z (upper or lower) 
[0-9A-Za-z-] # one character that is: 0-9 or a-z (upper or lower) or a dash 
\d{0,21}  # anywhere from 0 to 21 digits 
$    # assert at the end (not somewhere in the middle 

Si vous voulez faire correspondre plusieurs cas de cette expression, mettre l'expression ci-dessus (moins les assertions) en parantheses (()) avec tout ce qui est autorisé à séparer ces valeurs - j'ai choisi \s ou "espace"), puis utiliser le quantificateur +:

^([0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}\s+)+$ 

détectera/valider l'entrée suivante:

1234567890 AAAA123456789GGG-123  hhh5 A1B2000000000 

Si vous vouliez quelque chose d'autre, vous devrez poser une question plus claire (dans votre question, il y a beaucoup de contradictions et de la répétition qui fait il est extrêmement confus)

+0

Merci, laissez-moi rééditer ma question pour le rendre plus clair! – nocarrier

+0

dernière fois j'ai vérifié, un MaskedTextBox standard n'utilise pas les expressions régulières –

+0

Merci d'avoir tenté de répondre malgré les contradictions Code Jockey; J'ai nettoyé ma question pour fournir des exigences simples pour mes règles de validation d'expression. – nocarrier

Questions connexes