Szukam najlepszego kodu pocztowego i wyrażenia regularnego. Szukam czegoś, co obejmie większość (miejmy nadzieję) całego świata.
regex
zipcode
postal-code
Darryl Hein
źródło
źródło
Odpowiedzi:
Nie ma żadnego.
Kody pocztowe / pocztowe na całym świecie nie mają wspólnego wzoru. W niektórych krajach składają się z cyfr, w innych mogą być kombinacjami cyfr i liter, niektóre mogą zawierać spacje, inne kropki, liczba znaków może wynosić od dwóch do co najmniej sześciu ...
To, co możesz zrobić (teoretycznie), to utworzenie osobnego wyrażenia regularnego dla każdego kraju na świecie, co nie jest godne polecenia IMO. Ale nadal nie byłoby cię w części dotyczącej sprawdzania poprawności: kod pocztowy
12345
może istnieć, ale12346
nie, może12344
też nie istnieje. Jak to sprawdzić za pomocą wyrażenia regularnego?Nie możesz
źródło
^\d{5}(?:[-\s]\d{4})?$
Unicode CLDR zawiera regex kodu pocztowego dla każdego kraju. (W sumie 158 wyrażeń regularnych!)
core.zip
z http://unicode.org/Public/cldr/26.0.1/common/supplemental/postalCodeData.xml
rozpakowaną zawartość (bezpośrednia zawartość: common / suplemental / postalCodeData.xml )Google ma również usługę internetową z informacjami o formatowaniu adresów dla poszczególnych krajów, w tym kodami pocztowymi, tutaj - http://i18napis.appspot.com/address (znalazłem ten link za pośrednictwem http://unicode.org/review/pri180/ )
Edytować
Tutaj kopia wyrażenia regularnego postalCodeData.xml :
źródło
użyj tych regx
źródło
Każdy system kodów pocztowych używa tylko AZ i / lub 0-9, a czasem spacji / myślnika
Nie każdy kraj używa kodów pocztowych (np. Irlandia poza Dublinem), ale tutaj to zignorujemy.
Najkrótszym formatem kodu pocztowego jest Sierra Leone
NN
Najdłuższe jest Samoa Amerykańskie
NNNNN-NNNNNN
Powinieneś pozwolić na jedną spację lub myślnik.
Nie powinien zaczynać się ani kończyć spacją lub myślnikiem
Powinno to obejmować powyższe:
źródło
Próba objęcia całego świata jednym wyrażeniem regularnym nie jest całkowicie możliwa, a na pewno nie jest możliwa ani zalecana.
Nie trącić własnym rogiem, ale napisałem całkiem dokładne wyrażenia regularne, które mogą ci się przydać.
Kanadyjskie kody pocztowe
Amerykańskie kody pocztowe
Kody pocztowe w Wielkiej Brytanii
Nie można zagwarantować dokładności bez faktycznego wysłania czegoś na adres i bez powiadomienia osoby, gdy ją otrzyma, ale możemy zawęzić sytuację, eliminując przypadki, o których wiemy, że są złe.
źródło
To wygląda na dobrą referencję, chociaż nie ma jej w Regex.
Naprawdę, chyba że faktycznie wysyłasz coś do swoich użytkowników, nie sądzę, żeby było warto. A jeśli je wysyłasz, możesz skorzystać z narzędzi / usług do czyszczenia adresów, aby ułatwić sobie życie.
źródło
Używamy:
Kanada
Ameryka
Inny
źródło
W zależności od aplikacji możesz zaimplementować dopasowanie wyrażeń regularnych dla krajów, z których pochodzi większość odwiedzających, i nie sprawdzać poprawności dla pozostałych (akceptuj cokolwiek).
źródło
Big Jump zapomniał o łamaniu linii, odstępach i znakach kontrolnych.
Międzynarodowe kody pocztowe są rodzajem problemu zatrzymania.
źródło
Należy pamiętać, że jest to dość trudny problem, zgodnie z przyjętą odpowiedzią. Ale chyba nie zniechęciło to ludzi z geonames.org . Mają plik z informacją o kraju , który nie mieści się w całości w tej odpowiedzi - najwyraźniej limit wynosi 30000 znaków. Istnieją wyrażenia regularne dla około 150 krajów.
Wyodrębniłem tutaj fragmenty związane z tym pytaniem:
Mam nadzieję, że nie popełniłem błędu, moje wyrażenie regularne jest dość słabe.
źródło
Jeśli ktoś nadal jest zainteresowany sprawdzaniem poprawności kodów pocztowych, znalazłem rozwiązanie:
Korzystanie
Google Geocoding API
możemy sprawdzić ważność kodu pocztowego posiadającego zarówno kod kraju i ZIP sam kod.Na przykład mieszkam na Ukrainie, więc mogę sprawdzić w ten sposób: https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:80380|country:UA
Lub używając JS API: https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering
Gdzie
80380
jest ważny kod pocztowy dla Ukrainy, właściwie każdy (#####) jest ważny.Google zwraca
ZERO_RESULTS
status, jeśli nic nie znaleziono. LubOK
wynik, jeśli oba są poprawne.Mam nadzieję, że to będzie pomocne.
źródło
Jak zauważyli inni, jedno wyrażenie regularne, by rządzić nimi wszystkimi, jest mało prawdopodobne. Możesz jednak tworzyć wyrażenia regularne dla tylu krajów, ile potrzebujesz, korzystając z informacji o formatowaniu adresu z Universal Postal Union - mało znanej agencji ONZ.
Na przykład oto reguły formatowania adresu, w tym kod pocztowy, dla kilku krajów (format PDF):
źródło
Problem polega na tym, że prawdopodobnie nie masz dobrych środków, aby nadążyć za zmieniającymi się wymaganiami dotyczącymi kodów pocztowych w krajach po drugiej stronie globu i których nie znasz wspólnych języków. Jeśli nie masz wystarczająco dużego budżetu, aby to wyśledzić, prawie na pewno lepiej powierzyć odpowiedzialność za sprawdzanie adresów w Google lub Yahoo.
Obie firmy oferują funkcje wyszukiwania adresów za pomocą programowalnego interfejsu API.
źródło
Dlaczego to robisz i dlaczego cię to obchodzi? Jak zauważył Tom Ritter, nie ma znaczenia, czy w ogóle masz kod pocztowy / pocztowy, a tym bardziej czy jest on ważny, czy nie, dopóki nie wyślesz czegoś na ten adres. Nawet jeśli spodziewasz się, że pewnego dnia je wyślesz , nie oznacza to, że potrzebujesz dzisiaj kodu pocztowego .
źródło
Jak zauważono w innym miejscu, różnorodność na całym świecie jest ogromna. I nawet jeśli coś pasującego do wzoru nie oznacza, że istnieje.
Oczywiście jest wiele miejsc, w których kody pocztowe nie są używane (np. Dużo lub Irlandia).
źródło
Dokładny kod pocztowy ma inne przyczyny niż wysyłka. Biura podróży odbywające wycieczki transgraniczne (oczywiście poza strefą euro) potrzebują tych informacji z wyprzedzeniem, aby przekazać je władzom. Często informacje te są wprowadzane przez agenta, który może, ale nie musi znać takich rzeczy. DOWOLNĄ metodą, która pozwala ograniczyć liczbę błędów, jest Good Idea ™
Jednak napisanie wyrażenia regularnego obejmującego wszystkie kody pocztowe na świecie byłoby szalone.
źródło
Biorąc pod uwagę, że dla każdego kraju jest tak wiele przypadków skrajnych (np. Adresy w Londynie mogą używać nieco innego formatu niż w pozostałej części Wielkiej Brytanii), nie sądzę, że istnieje regex inny niż może:
Najlepiej pójść z dość szerokim wzorem (dobrze nie tak szerokim jak powyżej) lub traktować każdy kraj / region z własnym wzorem!
AKTUALIZACJA: Może być jednak możliwe dynamiczne skonstruowanie wyrażenia regularnego w oparciu o wiele mniejszych reguł specyficznych dla regionu - choć nie jestem pewien wydajności!
Wiele wzorców specyficznych dla kraju można znaleźć na stronie RegExLib .
źródło
Ktoś pytał o listę formatowania adresów mailowych i myślę, że tego właśnie szukał ...
Kompulsywny przewodnik Franka po adresach pocztowych: http://www.columbia.edu/~fdc/postal/ Jednak niewiele pomaga w kwestiach na poziomie ulicy.
Moja praca korzysta z kilku narzędzi, które pomagają w tym: - Usługi Lexis-Nexis, w tym wyszukiwania NCOA (otrzymasz standaryzację adresu za „bezpłatnie”) - „Melissa Data” http://www.melissadata.com
źródło
To jest bardzo prosty RegEx do sprawdzania amerykańskiego kodu pocztowego (nie ZipCode Plus Four):
Wydaje się, że wszystkie pięciocyfrowe numery są prawidłowymi kodami pocztowymi, z wyjątkiem
00000
,88888
&99999
.Przetestowałem ten RegEx z http://regexpal.com/
SP
źródło
Jeśli
Zip Code
zezwala na znaki i cyfry (alfanumeryczne), poniżej wyrażenia regularnego użyje się tam, gdzie pasuje, 5 lub 9 lub 10 znaków alfanumerycznych z jednym łącznikiem (-
):źródło