2009-09-04 15 views
5

Próbuję zobaczyć, co byłoby dobrym sposobem do sprawdzenia poprawności adresu w USA, Wiem, że nie może być właściwego sposób to zrobić, ale idę w podstawowy sposób: #, Nazwa ulicy, miasto, województwo i kod pocztowy.PHP regexp adres USA

Wszelkie pomysły zostaną docenione. Dzięki

+0

Jaką część adresu próbujesz sprawdzić za pomocą Regeksu? Cała sprawa, kod pocztowy? –

+0

jak już wcześniej wspomniałem, próbuję sprawdzić, czy ciąg rozpoczyna się od numeru (dowolny rozmiar), a następnie litery (nazwa ulicy) i (miasto) i dwuliterowy kod państwa. –

+0

Problem z tym, co właśnie wspomniałeś, polega na tym, że adresy nie muszą zaczynać się od numeru (np. One Microsoft Way, skrytki pocztowe), a nazwa ulicy nie musi mieć liter (autostrad, ponumerowanych ulic). – jimyi

Odpowiedz

2

Istnieje zbyt wiele odmian adresu, aby móc to zrobić za pomocą wyrażeń regularnych. Lepiej znajdź usługę internetową, która może sprawdzać poprawność adresów. USPS has one - będziesz musiał poprosić o pozwolenie na jego użycie.

+0

Właściwie to nie odmiany, ale fakt, że adres pocztowy nie jest regularny. Przynajmniej nie sądzę, że tak jest. Jeśli ktoś może to udowodnić, zrób to - byłbym zainteresowany. –

4

Nie próbuj. Ktoś prawdopodobnie ma skrzynkę pocztową, numer mieszkania itp., A oni będą naprawdę zirytowani. Nawet "normalna" nazwa ulicy może zawierać cyfry, np. 125th Street (i wiele innych) w Nowym Jorku. Nawet przedmieścia mogą mieć kilka ponumerowanych ulic.

Nazwy miast mogą zawierać spacje.

+0

Mieszkałem na ulicy o nazwie "East South Boulder Road". To znaczy wschodnia część ulicy o nazwie "South Boulder Road". Bardzo miło było wyjaśnić ludziom, którzy pytają o mój adres. –

+4

W Australii znajduje się * miasto * o nazwie 1770. Aby odpowiedzieć na kolejne pytanie, nie, kod pocztowy to 4677. –

+0

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

4

Poproś użytkownika o wpisanie części adresu w oddzielnych polach (nazwa ulicy, miasto, województwo i kod pocztowy) i użycie wszelkich poprawności odpowiednich dla takiego pola. Taka jest ogólna praktyka.

Ewentualnie, jeśli chcesz najprostszych regex, który pasuje do czterech ciągów oddzielonych przecinkami trzech, spróbuj tego:

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

Jeśli sprawy mecz, można użyć dodatkowego wzorca dopasowania do sprawdzenia składników adresu. Nie ma możliwości sprawdzenia poprawności adresu, ale możesz być w stanie napisać kody pocztowe i kody państwowe.

0

To nie jest rozwiązanie kuloodporne, ale zakłada się, że adres zaczyna się od cyfry numeru ulicy i kończy się na kod pocztowy, który może mieć 5 lub 9 cyfr.

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

Jak Powiedziałem, że nie jest kuloodporne, ale użyłem go z marginalnym sukcesem w przeszłości.

0

Tutaj w Nowej Zelandii, można licencjonować oficjalną listę adresów pocztowych od New Zealand Post - daje danych potrzebnych do wypełnienia tabeli z każdy poprawny adres pocztowy w Nowej Zelandii.

Members przeciwko tej liście jest dużo łatwiejsze niż próbuje wymyślić Regex - a dokładność jest znacznie znacznie wyższe, a także, jak skończyć z trzech przypadków:

  • Adres Sprawdzanie poprawności znajduje się na liście, więc wiesz, że jest to prawdziwy adres.
  • Adres, który sprawdzasz, jest bardzo podobny do adresu na liście, więc wiesz, że prawdopodobnie jest to prawdziwy adres.
  • Twój adres "Ponowna walidacja nie jest podobna na liście, więc może, ale nie musi być prawdziwa.

Najlepszym dostaniesz z regex jest

  • Adres jesteś walidacji mecze regex, więc może to być prawdziwy adres
  • Adres jesteś walidacji nie dopasuj wyrażenie regularne, więc może to nie być rzeczywisty adres:

Konieczność poznania adresów pocztowych jest dość powszechną sytuacją dla wielu firm, dlatego uważam, że licencjonowanie listy będzie możliwe w większości obszarów.

Jedyny lepki bit będzie ceną.

2

zgadzam się z Salman : użytkownik powinien wprowadzić dane w różnych polach (jeden dla zip, jeden dla stanu, drugi dla miasta i jeden dla numeru/nazwy ulicy) Dla każdego pola użyj innego wyrażenia.Na ulicy #/nazwa najlepsze wyrażenie, które przyszedłem w górę było

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

Czy to wyrażenie regularne będzie działać z nazwami złożonymi lub z ST/DR/AVE? Myślę o "1234 Old Statesville Rd" lub "123 Main ST". Część nazwy ulicy nie zajmuje spacji. – rajah9