2010-04-10 5 views
3

Comment puis-je écrire une regex pour faire correspondre les chaînes en suivant ces règles?Regex pour correspondre à l'entrée de code de la carte

  • 1 lettre suivie de 4 lettres ou chiffres, puis
  • 5 lettres ou chiffres, puis
  • 3 lettres ou chiffres suivi d'un numéro et un des signes suivants: & @?

Je dois autoriser une entrée sous la forme d'une chaîne de 15 caractères ou de 3 groupes de 5 caractères séparés par un espace. Je l'implémente en JavaScript.

Répondre

1

Cela devrait être le:

/^[a-z][a-z0-9]{4} ?[a-z0-9]{5} ?[a-z0-9]{3}[0-9][!&@?]$/i 

Ne hésitez pas à changer et 0-9 [0-9] avec \d si bon vous semble.
La regex est assez simple et lisible. ^ et $ assurez-vous qu'il s'agit bien d'une correspondance complète, donc il n'y a pas de caractères supplémentaires avant ou après le code, et le drapeau /i permet les majuscules ou les minuscules.

+5

J'aurais aimé avoir quelqu'un pour le faire tous mes devoirs aussi ... – Stephen

+3

La spécification ne permet que 15 ou 17 caractères; votre expression régulière permettrait également 16 caractères. – Gumbo

+0

@Stephen - J'aimerais avoir des devoirs. –

1

Je voudrais commencer par un tutorial.

attention à quantificateurs (comme {N}) et les classes de caractères (comme [a-zA-Z])

5

Je ne vais pas écrire toute regex pour vous puisque c'est des devoirs, mais voici quelques conseils qui devraient aider vous:

  • Utilisez des classes de caractères. [A-Z] correspond tout en majuscules. [a-z] correspond tout en minuscules. [0-9] correspond à des numéros. Vous pouvez les combiner comme [A-Za-z0-9].
  • Utilisez des quantificateurs tels que {n}, donc [A-Z]{3} vous donne 3 majuscules.
  • Vous pouvez placer d'autres caractères dans les classes de caractères. Disons que vous vouliez faire correspondre% ou @ ou #, vous pouvez faire [%@#] qui correspond à l'un de ces caractères.
  • Quelques méta-caractères (caractères qui ont une signification particulière dans le contexte des expressions régulières) devront être échappé comme ceci: \$ (depuis $ correspond à la fin d'une ligne)
  • ^ et $ match, le début et la fin de la ligne respectivement.
  • \s correspond à l'espace blanc, mais si vous désinfectez votre entrée, vous ne devriez pas avoir besoin de l'utiliser.
  • Les drapeaux après la regex font des choses spéciales. Par exemple dans /[a-z]/i, le i ignore le cas.
+1

Il n'est pas clair que ce soit des devoirs, c'était juste un vandalisme. –

+0

@Roger: même s'il ne s'agit pas de devoirs * en soi *, l'OP se trouve clairement * apprendre * des expressions régulières et tirera plus d'une réponse pédagogique que d'une réponse finie. Ou du moins c'est mon point de vue. – dmckee

+0

@dmckee: Je ne suggère pas qu'une réponse pédagogique ne soit pas donnée; tout comme pour les questions autres que les devoirs, expliquer pourquoi est toujours plus précieux. Mais les réponses du genre «tu ne mérites pas une réponse complète, voici quelques indices» sont légèrement choquantes (au mieux). –

0
^[a-zA-Z][a-zA-Z0-9]{4} ?[a-zA-Z0-9]{5} ?[a-zA-Z0-9]{3}[\!\&\@\?]$ 
+2

Vous n'avez pas besoin d'échapper ces caractères à l'intérieur d'une classe de caractères; '[! & @?]' suffit. – Gumbo

Questions connexes