2009-09-16 5 views
8

J'ai un problème similaire à mon message récent, mais avec un validateur de code postal, je suis en train de convertir vers un processus de validation javascript. mon script ressemble à ceci:Javascript Expression régulière pour correspondre à 5 ou 9 chiffres code postal

var regPostalCode = new RegExp("\\d{5}(-\d{4})?"); 
    var postal_code = $("input[name='txtzipcode']").val(); 
    if (regPostalCode.test(postal_code) == false) { 
     bValid = false; 
     msg = msg + '<li>Invalid Zip Code.</li>'; 
    } 

De mon récent post j'ai appris le caractère d'échappement que je avais besoin au début. Fondamentalement, cette fonction valide un code postal, par exemple 22601, ce qui est correct, mais il ne devrait pas valider 22601-1. Il devrait y avoir 4 chiffres après le tiret comme 22601-9999. C'est comme si la deuxième partie de la validation était toujours vraie. Encore une fois cette expression a fonctionné dans le passé pour moi. Est-ce que je manque quelque chose? Un autre personnage d'échappement est-il nécessaire?

Répondre

16

Ajouter des ancres: new RegExp("^\\d{5}(-\\d{4})?$"). Cela force le moteur d'expressions régulières à accepter uniquement une correspondance, si elle commence au premier caractère de la chaîne (^) et se termine à la fin de la chaîne ($) en cours de correspondance.

Notez qu'il peut y avoir une faute de frappe dans l'expression régulière que vous avez donnée dans votre question: il manque une barre oblique inverse dans le second \d.

+0

C'était la solution. Pas de faute de frappe, juste un autre bug. Merci pour l'explication ainsi que la solution. –

1

Changer votre regex:

new RegExp("^\\d{5}(-\\d{4})?$") 
-1

Je dois manquer quelque chose ici:

Ce regex:

var regExUs = /^\\d{5}(-\\d{4})?$/; 

retourne NULL avec un code postal valide:

console.log(regExUs.exec("34561-1201")); 
null 
Questions connexes