2010-12-02 18 views
7

J'ai une expression régulière simple:JavaScript expression régulière - deux [az] et de [0-9] seulement

[A-z]{2}[0-9]{3})$/g dans les éléments suivants:

regForm.submit(function(){ 
    if ($.trim($('#new-usr').val()).match(/([A-z]{2}[0-9]{3})$/g)) { 
    alert('No'); 
    return false; 
    } 
}); 

Ceci est correctement la lecture que quelque chose comme 'ab123' donne une alerte et pas 'ab1234'. Cependant, 'abc123' lance toujours l'alerte. J'en ai besoin pour lancer l'alerte quand il n'y a que deux lettres suivies de trois chiffres.

Répondre

11

Essayez /^[A-z]{2}[0-9]{3}$/g à la place.

Vous devez spécifier que toute la chaîne doit être mise en correspondance. Sinon, vous obtenez la partie surlignée correspondante: a bc123.

(je les () « omis s, parce que vous n'avez pas vraiment besoin du groupe.)

BTW, êtes-vous sûr que vous voulez [A-z] et pas seulement [A-Za-z]?

7

La classe de caractères [A-z] n'est probablement pas ce dont vous avez besoin.

Pourquoi?

La classe de caractères [A-z] correspond à certains caractères non alphabétiques comme [, ] parmi d'autres.

JS fiddle link pour le prouver.

This W3school tutorial le recommande incorrectement.

Si vous avez besoin que des lettres minuscules utilisent [a-z]
Si vous avez besoin que des lettres majuscules utilisent [A-Z]
Si vous avez besoin à la fois l'utilisation: [a-zA-Z]

Si vous voulez faire correspondre une chaîne si elle dispose de 2 lettres suivies de 3 chiffres partout dans la chaîne, il suffit de retirer l'ancre de fin $ de votre modèle:

[a-z]{2}[0-9]{3} 

Si vous voulez faire correspondre une chaîne si elle dispose de 2 lettres suivies de 3 chiffres et rien d'autre utilisation à la fois commencer l'ancre ^ et à la fin d'ancrage $ comme

^[a-z]{2}[0-9]{3}$ 
+0

Salut, C'était une chaîne de deux a-z exactement suivie de trois 0-9. À votre santé. –

+0

La classe de caractères J'utilise le '\t Trouvez n'importe quel caractère de majuscule A en minuscule z' comme sur http://www.w3schools.com/jsref/jsref_obj_regexp.asp. Est-ce que ce n'est pas recommandé? –

+0

@Scott: Ce n'est pas recommandé.S'il vous plaît voir ma réponse mise à jour. – codaddict

1

Vous pouvez également utiliser:

/\b([A-z]{2}[0-9]{3})\b/g 

si votre chaîne contient plusieurs mots et que vous essayez de faire correspondre un mot.