2009-09-04 14 views
5

Sto provando a vedere quale sarebbe un buon modo per convalidare un indirizzo negli Stati Uniti, so che potrebbe non esserci un modo corretto per farlo, ma sto andando per il modo base: #, Nome via, Città, Stato e CAP.PHP regexp indirizzo USA

Qualsiasi idea sarà apprezzata. Grazie

+0

Quale parte dell'indirizzo stai provando a convalidare con un Regex? Il tutto, il codice postale? –

+0

come ho detto prima, sto provando a vedere se la stringa inizia con un numero (qualsiasi dimensione), seguito da lettere (nome della via) e (città) e due lettere di codice dello stato. –

+0

Il problema con ciò che hai appena menzionato è che gli indirizzi non devono iniziare con un numero (ad esempio, Microsoft Way, caselle postali) e il nome della via non deve contenere lettere (autostrade, strade numerate). – jimyi

risposta

2

Ci sono troppe variazioni nell'indirizzo per poterlo fare usando le espressioni regolari. È meglio trovare un servizio web in grado di convalidare gli indirizzi. USPS has one - dovrai chiedere il permesso per usarlo.

+0

In realtà, non sono le varianti, ma il fatto che un indirizzo postale non è regolare. Almeno, non penso che lo sia. Se qualcuno può dimostrarlo, per favore fallo - sarei interessato. –

4

Non provarci. Qualcuno potrebbe avere una casella postale, un numero di appartamento ecc. E saranno davvero arrabbiati con te. Anche un nome di strada "normale" può avere numeri, come 125th Street (e molti altri) a New York City. Anche un sobborgo può avere alcune strade numerate.

E i nomi di città possono avere spazi.

+0

Ho vissuto in una strada chiamata "East South Boulder Road". Cioè, la parte orientale della strada chiamata "South Boulder Road". Questo è stato molto divertente da spiegare alle persone che chiedono il mio indirizzo. –

+4

In Australia c'è una * città * chiamata 1770. E per rispondere alla prossima domanda, no, il codice postale è 4677. –

+0

http://en.wikipedia.org/wiki/1770,_Queensland –

4

Chiedere all'utente di immettere parti dell'indirizzo in campi separati (nome della via, città, stato e codice postale) e utilizzare qualsiasi convalida appropriata per tale campo. Questa è la pratica generale.

In alternativa, se si desidera più semplice di espressione regolare che corrisponde per quattro stringhe separate da virgole tre, provate questo:

/^(.+),([^,]+),([^,]+),([^,]+)$/ 

Se le cose partita, è possibile utilizzare modello raggiungere anche per controllare i componenti dell'indirizzo. Non c'è modo di verificare la validità dell'indirizzo stradale, ma potresti essere in grado di inviare SMS e codici di stato.

0

Questa non è una soluzione a prova di proiettile, ma il presupposto è che un indirizzo inizia con un numero numerico per il numero civico e termina con un codice postale che può essere 5 o 9 numeri.

([0-9] {1,} [\ s \ S] * [0-9] {5} (: -??? [0-9] {4}))

Come Ho detto, non è a prova di proiettile, ma l'ho usato con successo marginale in passato.

0

qui in Nuova Zelanda, si può concedere in licenza la lista ufficiale di indirizzi postali da New Zealand Post - dandovi i dati necessari per popolare una tabella con ogni indirizzo postale valido in Nuova Zelanda.

Convalida contro questa lista è molto più semplice che cercare di trovare una Regex - e l'accuratezza è molto molto superiore e, come si finisce con tre casi:

  • L'indirizzo stai convalidando è nella lista, quindi sai che è un vero indirizzo
  • L'indirizzo che stai convalidando è molto simile a uno nella lista, quindi sai che è probabilmente un vero indirizzo
  • L'indirizzo che hai la convalida non è simile nella lista, quindi può essere o non essere reale.

Il meglio che si otterrà con una regex è

  • L'indirizzo si sta convalidando le partite regex, quindi potrebbe essere un vero e proprio indirizzo
  • L'indirizzo che stai convalidare non lo fa corrisponde alla regex, quindi potrebbe non essere un indirizzo reale

La necessità di conoscere gli indirizzi postali è una situazione piuttosto comune per molte aziende, quindi credo che la concessione di licenze di un elenco sarà possibile nella maggior parte delle aree.

L'unico bit positivo sarà il prezzo.

2

Sono d'accordo con Salman : l'utente inserisce i dati in campi diversi (uno per zip, uno per stato, uno per città e uno per il nome #/via. Usa una regex diversa per ogni campo. Per la strada #/nome la migliore espressione che ho ricevuto con era

/^[0-9]{1,7} [a-zA-z0-9]{2,35}\a*/ 
+0

La regex funzionerà successivamente con nomi composti o con ST/DR/AVE? Sto pensando a "1234 Old Statesville Rd" o "123 Main ST". La parte del nome della via non occupa spazi. – rajah9