2009-09-16 8 views
8

Ho un problema simile al mio post recente ma con un validatore di codice postale sto tentando di convertire in un processo di convalida javascript. il mio script appare in questo modo:Espressione regolare Javascript corrispondente a un codice postale a 5 o 9 cifre

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>'; 
    } 

Dal mio recente post ho appreso del carattere di escape che avevo bisogno all'inizio. Fondamentalmente questa funzione sta validando un codice postale che dice 22601 che è corretto, ma non dovrebbe convalidare 22601-1. Dovrebbero esserci 4 cifre dopo il trattino come 22601-9999. È come se la seconda parte della validazione fosse sempre vera. Ancora una volta questa espressione ha funzionato in passato per me. Mi sto perdendo qualcosa? È necessario un altro personaggio di fuga?

risposta

16

Aggiungi ancore: new RegExp("^\\d{5}(-\\d{4})?$"). Ciò impone al motore delle espressioni regolari di accettare una corrispondenza solo se inizia dal primo carattere della stringa (^) e termina alla fine della stringa ($) corrispondente.

Nota che potrebbe esserci un refuso nell'espressione regolare che hai inserito nella tua domanda: al secondo \d manca una barra rovesciata.

+0

Questa era la soluzione. No typo, solo un altro bug. Grazie per la spiegazione e la soluzione. –

1

Cambia la tua regex per:

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

Devo mancare qualcosa qui:

Questa espressione regolare:

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

restituisce null con un codice postale valida:

console.log(regExUs.exec("34561-1201")); 
null 
Problemi correlati