궁극적 우편 번호와 우편 정규식은 무엇입니까?


200

궁극적 인 우편 번호와 우편 번호 정규식을 찾고 있습니다. 나는 세상에서 가장 희망적으로 모든 것을 다룰 무언가를 찾고 있습니다.


4
모든 우편 번호에 대한 하나의 정규 표현식은 대부분의 경우 쓸모가 없으며 많은 유니 코드 인코딩이 필요합니다. "New York, NY AF23Q"와 같은 것을 올바르게 검증하지 않도록 국가별로 정규식을 확인하는 것이 훨씬 좋습니다.
네 – 저 제이크.

101
문제가 있군. 당신은 그것에 대한 정규식을 작성합니다. 이제 두 가지 문제가 있습니다.
Robert S.

regexlib.com/Search.aspx?k=decimal&c=3&m=-1&ps=100 여기에 필드 이동의 유효성을 검사
디 네시 쿠마르을

2
가능한 모든 미래 가치를 다루는 것.
Jodrell

답변:


126

없습니다.

전 세계의 우편 번호는 일반적인 패턴을 따르지 않습니다. 일부 국가에서는 숫자로 구성되며 다른 국가에서는 문자의 숫자 조합, 일부는 공백, 다른 점은 문자 수, 문자 수는 2에서 6까지 다양 할 수 있습니다 ...

당신이 (이론적으로) 할 수있는 일은 권장 IMO가 아닌 전 세계 모든 국가에 대해 별도의 정규식을 만드는 것입니다. 그러나 여전히 유효성 검사 부분에서 누락 12345될 수 있습니다 . 우편 번호 는 존재할 수 있지만 존재하지 않을 12346수도 12344있습니다. 정규식으로 어떻게 확인합니까?

당신은 할 수 없습니다.


정규식을 컴파일 할 수 있다고 생각하지만 이와 같은 작업은 데이터베이스에 훨씬 적합합니다. 정규식처럼 보일 것입니다 10000 | 10001 | 10002 | 10003 | .......
Kibbee

필드의 유효성을 확인하는 데 여기 regexlib.com/Search.aspx?k=decimal&c=3&m=-1&ps=100
디 네시 쿠마르

당신은 당신의 국가 (참조 일치 처음으로 정규 표현식 사용할 수 있습니다 en.wikipedia.org/wiki/List_of_postal_codes를 같은 외부 서비스)와 실제 검사를 할 geonames.org/export/ws-overview.html
SimonSimCity

3
내 2 센트 : 브라질에서는 실제로 8 개의 숫자, 5, 대시와 3 개의 숫자가 더 있습니다
Jorge Campos

^\d{5}(?:[-\s]\d{4})?$
Aamir Afridi

260

유니 코드 CLDR에는 각 국가의 우편 번호 정규식이 포함되어 있습니다. (총 158 개의 정규 표현식!)

구글은 또한 국가 별 주소가 여기, 우편 번호를 포함한 정보를 서식과 웹 서비스가 - http://i18napis.appspot.com/address (나는 통해 링크 발견 http://unicode.org/review/pri180/를 )

편집하다

다음은 postalCodeData.xml regex 의 사본입니다 .

"GB", "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}"
"JE", "JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}"
"GG", "GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}"
"IM", "IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}"
"US", "\d{5}([ \-]\d{4})?"
"CA", "[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d"
"DE", "\d{5}"
"JP", "\d{3}-\d{4}"
"FR", "\d{2}[ ]?\d{3}"
"AU", "\d{4}"
"IT", "\d{5}"
"CH", "\d{4}"
"AT", "\d{4}"
"ES", "\d{5}"
"NL", "\d{4}[ ]?[A-Z]{2}"
"BE", "\d{4}"
"DK", "\d{4}"
"SE", "\d{3}[ ]?\d{2}"
"NO", "\d{4}"
"BR", "\d{5}[\-]?\d{3}"
"PT", "\d{4}([\-]\d{3})?"
"FI", "\d{5}"
"AX", "22\d{3}"
"KR", "\d{3}[\-]\d{3}"
"CN", "\d{6}"
"TW", "\d{3}(\d{2})?"
"SG", "\d{6}"
"DZ", "\d{5}"
"AD", "AD\d{3}"
"AR", "([A-HJ-NP-Z])?\d{4}([A-Z]{3})?"
"AM", "(37)?\d{4}"
"AZ", "\d{4}"
"BH", "((1[0-2]|[2-9])\d{2})?"
"BD", "\d{4}"
"BB", "(BB\d{5})?"
"BY", "\d{6}"
"BM", "[A-Z]{2}[ ]?[A-Z0-9]{2}"
"BA", "\d{5}"
"IO", "BBND 1ZZ"
"BN", "[A-Z]{2}[ ]?\d{4}"
"BG", "\d{4}"
"KH", "\d{5}"
"CV", "\d{4}"
"CL", "\d{7}"
"CR", "\d{4,5}|\d{3}-\d{4}"
"HR", "\d{5}"
"CY", "\d{4}"
"CZ", "\d{3}[ ]?\d{2}"
"DO", "\d{5}"
"EC", "([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?"
"EG", "\d{5}"
"EE", "\d{5}"
"FO", "\d{3}"
"GE", "\d{4}"
"GR", "\d{3}[ ]?\d{2}"
"GL", "39\d{2}"
"GT", "\d{5}"
"HT", "\d{4}"
"HN", "(?:\d{5})?"
"HU", "\d{4}"
"IS", "\d{3}"
"IN", "\d{6}"
"ID", "\d{5}"
"IL", "\d{5}"
"JO", "\d{5}"
"KZ", "\d{6}"
"KE", "\d{5}"
"KW", "\d{5}"
"LA", "\d{5}"
"LV", "\d{4}"
"LB", "(\d{4}([ ]?\d{4})?)?"
"LI", "(948[5-9])|(949[0-7])"
"LT", "\d{5}"
"LU", "\d{4}"
"MK", "\d{4}"
"MY", "\d{5}"
"MV", "\d{5}"
"MT", "[A-Z]{3}[ ]?\d{2,4}"
"MU", "(\d{3}[A-Z]{2}\d{3})?"
"MX", "\d{5}"
"MD", "\d{4}"
"MC", "980\d{2}"
"MA", "\d{5}"
"NP", "\d{5}"
"NZ", "\d{4}"
"NI", "((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?"
"NG", "(\d{6})?"
"OM", "(PC )?\d{3}"
"PK", "\d{5}"
"PY", "\d{4}"
"PH", "\d{4}"
"PL", "\d{2}-\d{3}"
"PR", "00[679]\d{2}([ \-]\d{4})?"
"RO", "\d{6}"
"RU", "\d{6}"
"SM", "4789\d"
"SA", "\d{5}"
"SN", "\d{5}"
"SK", "\d{3}[ ]?\d{2}"
"SI", "\d{4}"
"ZA", "\d{4}"
"LK", "\d{5}"
"TJ", "\d{6}"
"TH", "\d{5}"
"TN", "\d{4}"
"TR", "\d{5}"
"TM", "\d{6}"
"UA", "\d{5}"
"UY", "\d{5}"
"UZ", "\d{6}"
"VA", "00120"
"VE", "\d{4}"
"ZM", "\d{5}"
"AS", "96799"
"CC", "6799"
"CK", "\d{4}"
"RS", "\d{6}"
"ME", "8\d{4}"
"CS", "\d{5}"
"YU", "\d{5}"
"CX", "6798"
"ET", "\d{4}"
"FK", "FIQQ 1ZZ"
"NF", "2899"
"FM", "(9694[1-4])([ \-]\d{4})?"
"GF", "9[78]3\d{2}"
"GN", "\d{3}"
"GP", "9[78][01]\d{2}"
"GS", "SIQQ 1ZZ"
"GU", "969[123]\d([ \-]\d{4})?"
"GW", "\d{4}"
"HM", "\d{4}"
"IQ", "\d{5}"
"KG", "\d{6}"
"LR", "\d{4}"
"LS", "\d{3}"
"MG", "\d{3}"
"MH", "969[67]\d([ \-]\d{4})?"
"MN", "\d{6}"
"MP", "9695[012]([ \-]\d{4})?"
"MQ", "9[78]2\d{2}"
"NC", "988\d{2}"
"NE", "\d{4}"
"VI", "008(([0-4]\d)|(5[01]))([ \-]\d{4})?"
"PF", "987\d{2}"
"PG", "\d{3}"
"PM", "9[78]5\d{2}"
"PN", "PCRN 1ZZ"
"PW", "96940"
"RE", "9[78]4\d{2}"
"SH", "(ASCN|STHL) 1ZZ"
"SJ", "\d{4}"
"SO", "\d{5}"
"SZ", "[HLMS]\d{3}"
"TC", "TKCA 1ZZ"
"WF", "986\d{2}"
"XK", "\d{5}"
"YT", "976\d{2}"

3
AU 우편 번호 정규식을 빠르게 스캔하면 ...이 정규식은 매우 간단하고 많은 양의 오 탐지를 허용하므로 철저하지는 않습니다.
Taryn East

7
우편 번호 정규식을 포함하는 최신 버전의 유니 코드 CLDR은 버전 26.0.1입니다. 이후 버전에서는 데이터가 유지되지 않고 신뢰할 수있는 다른 소스를 찾을 수 없으므로 제거되었습니다.
KIKO Software

1
프랑스어 우편 번호 정규식의 경우에도 매우 기본입니다. 이것을 사용하십시오 "^ ((0 [1-9]) | ([1-8] [0-9]) | (9 [0-8]) | (2A) | (2B)) [0-9] {3} $ "-> developpez.net/forums/d518232/webmasters-developpement-web/…
Vincent D.

지금 i18napis.appspot.com/address/data/GB를 사용 하고 있습니다. 이 서비스에 문제가 있습니까?
mgol

1
@ kiko-software의 의견에 대한 작은 수정 : 우편 번호 데이터가 포함 된 최신 버전은 27.0.3 입니다.
Sietse

89

이 정규식을 사용하십시오

$ZIPREG=array(
    "US"=>"^\d{5}([\-]?\d{4})?$",
    "UK"=>"^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$",
    "DE"=>"\b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b",
    "CA"=>"^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$",
    "FR"=>"^(F-)?((2[A|B])|[0-9]{2})[0-9]{3}$",
    "IT"=>"^(V-|I-)?[0-9]{5}$",
    "AU"=>"^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$",
    "NL"=>"^[1-9][0-9]{3}\s?([a-zA-Z]{2})?$",
    "ES"=>"^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$",
    "DK"=>"^([D|d][K|k]( |-))?[1-9]{1}[0-9]{3}$",
    "SE"=>"^(s-|S-){0,1}[0-9]{3}\s?[0-9]{2}$",
    "BE"=>"^[1-9]{1}[0-9]{3}$",
    "IN"=>"^\d{6}$"
);

7
실제로 OP에 응답하는 것으로 보인 더 나은 시도 중 하나입니다. 광고가 많을수록 속도는 느려지지만 깨끗하고 명확한 접근 방식입니다.
Rob

3
국가 코드에서 정규식 중 하나를 선택하는 것처럼 Rob이 제안한대로 더 추가할수록 속도가 느려지지 않습니다.
Thomaschaaf

2
2012 년에이 글을 게시 한 것을 확인했습니다.
rybo111

@ rybo111 확인 Chi 답변.
Giulio Caccin

5
@ ddunn801, 패턴 유효성 검사와 우편 번호 인증에는 큰 차이가 있습니다. 우편 번호를 정기적으로 추가하고 삭제하기 때문에 코드 인증은 전체 순위가 더 어려워집니다. 이상적인 세계에서는 전체 우편 주소를 확인하기 위해 서비스 (예 : USPS)에 제출하기 전에 패턴을 확인하기 위해 빠른 검사를 수행합니다 (이와 같은 서비스는 유료입니다. 잘못된 데이터로 가치를 낭비하는 것을 싫어합니다) ). 아아, 세상은 이상적이지 않다.
JBH

48
  1. 모든 우편 번호 시스템은 AZ 및 / 또는 0-9 만 사용하며 때로는 공간 / 대시

  2. 모든 국가에서 우편 번호 (예 : 더블린 이외의 아일랜드)를 사용하는 것은 아니지만 여기서는 무시합니다.

  3. 가장 짧은 우편 번호 형식은 Sierra Leone입니다. NN

  4. 가장 긴 미국령 사모아 NNNNN-NNNNNN

  5. 하나의 공백 또는 대시를 허용해야합니다.

  6. 공백이나 대시로 시작하거나 끝나지 않아야 함

이것은 위를 다루어야합니다.

(?i)^[a-z0-9][a-z0-9\- ]{0,10}[a-z0-9]$

8
이것은 가능한 모든 조합에 대한 완전한 검증이 아니라 위생 검사 (OP가 원했던 것임)를 제공하는 유일한 대답 인 것 같습니다. 내가 원하는 것은 정확히
Lukos

1
@GiulioCaccin H0H0H0은 (아이들이 산타 클로스 척 캐나다 포스트에서 편지를 얻기 위해 사용하는) 유효한 캐나다 우편 번호,하지만 그게 : 유효한 고객이 우편 번호의 의미하지 않는다
닐 맥기

2
참고로, 아메리칸 사모아는 우편 번호가 하나만있을 정도로 작으며 96799
naterkane

5
제 생각에는 이것이 유일한 좋은 대답입니다. 예를 들어 HTML 패턴 속성에서 사전 검증으로 보편적으로 사용될 수 있습니다.
Blackbam

2
나는 이것이 위생 검사를 원하고 국가마다 정확하게 유효성을 검사하지 않는 상황에 대한 좋은 대답이라고 생각합니다. 많은 노력없이 데이터를 좀 더 깨끗하게 유지하기 위해 완전한 안전이 필요한 경우 다른 사람들이 지적한대로 타사 플러그인 / 서비스가 필요할 수 있습니다.
Yo Ludke

17

하나의 정규 표현으로 전 세계를 덮으려고 시도하는 것은 완전히 가능하지 않으며 확실히 실현 가능하지 않거나 권장되지 않습니다.

내 자신의 경적을 울리지 말고, 나는 당신이 도움이 될 수있는 꽤 철저한 정규 표현식을 작성했습니다.

  • 캐나다 우편 번호

    Basic validation:
    ^[ABCEGHJ-NPRSTVXY]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$
    
    Extended validation:
    ^(A(0[ABCEGHJ-NPR]|1[ABCEGHK-NSV-Y]|2[ABHNV]|5[A]|8[A])|B(0[CEHJ-NPRSTVW]|1[ABCEGHJ-NPRSTV-Y]|2[ABCEGHJNRSTV-Z]|3[ABEGHJ-NPRSTVZ]|4[ABCEGHNPRV]|5[A]|6[L]|9[A])|C(0[AB]|1[ABCEN])|E(1[ABCEGHJNVWX]|2[AEGHJ-NPRSV]|3[ABCELNVYZ]|4[ABCEGHJ-NPRSTV-Z]|5[ABCEGHJ-NPRSTV]|6[ABCEGHJKL]|7[ABCEGHJ-NP]|8[ABCEGJ-NPRST]|9[ABCEGH])|G(0[ACEGHJ-NPRSTV-Z]|1[ABCEGHJ-NPRSTV-Y]|2[ABCEGJ-N]|3[ABCEGHJ-NZ]|4[ARSTVWXZ]|5[ABCHJLMNRTVXYZ]|6[ABCEGHJKLPRSTVWXZ]|7[ABGHJKNPSTXYZ]|8[ABCEGHJ-NPTVWYZ]|9[ABCHNPRTX])|H(0[HM]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NPRSTV-Z]|4[ABCEGHJ-NPRSTV-Z]|5[AB]|7[ABCEGHJ-NPRSTV-Y]|8[NPRSTYZ]|9[ABCEGHJKPRSWX])|J(0[ABCEGHJ-NPRSTV-Z]|1[ACEGHJ-NRSTXZ]|2[ABCEGHJ-NRSTWXY]|3[ABEGHLMNPRTVXYZ]|4[BGHJ-NPRSTV-Z]|5[ABCJ-MRTV-Z]|6[AEJKNRSTVWYXZ]|7[ABCEGHJ-NPRTV-Z]|8[ABCEGHLMNPRTVXYZ]|9[ABEHJLNTVXYZ])|K(0[ABCEGHJ-M]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-MPRSTVW]|4[ABCKMPR]|6[AHJKTV]|7[ACGHK-NPRSV]|8[ABHNPRV]|9[AHJKLV])|L(0[[ABCEGHJ-NPRS]]|1[ABCEGHJ-NPRSTV-Z]|2[AEGHJMNPRSTVW]|3[BCKMPRSTVXYZ]|4[ABCEGHJ-NPRSTV-Z]|5[ABCEGHJ-NPRSTVW]|6[ABCEGHJ-MPRSTV-Z]|7[ABCEGJ-NPRST]|8[EGHJ-NPRSTVW]|9[ABCGHK-NPRSTVWYZ])|M(1[BCEGHJ-NPRSTVWX]|2[HJ-NPR]|3[ABCHJ-N]|4[ABCEGHJ-NPRSTV-Y]|5[ABCEGHJ-NPRSTVWX]|6[ABCEGHJ-NPRS]|7[AY]|8[V-Z]|9[ABCLMNPRVW])|N(0[ABCEGHJ-NPR]|1[ACEGHKLMPRST]|2[ABCEGHJ-NPRTVZ]|3[ABCEHLPRSTVWY]|4[BGKLNSTVWXZ]|5[ACHLPRV-Z]|6[ABCEGHJ-NP]|7[AGLMSTVWX]|8[AHMNPRSTV-Y]|9[ABCEGHJKVY])|P(0[ABCEGHJ-NPRSTV-Y]|1[ABCHLP]|2[ABN]|3[ABCEGLNPY]|4[NPR]|5[AEN]|6[ABC]|7[ABCEGJKL]|8[NT]|9[AN])|R(0[ABCEGHJ-M]|1[ABN]|2[CEGHJ-NPRV-Y]|3[ABCEGHJ-NPRSTV-Y]|4[AHJKL]|5[AGH]|6[MW]|7[ABCN]|8[AN]|9[A])|S(0[ACEGHJ-NP]|2[V]|3[N]|4[AHLNPRSTV-Z]|6[HJKVWX]|7[HJ-NPRSTVW]|9[AHVX])|T(0[ABCEGHJ-MPV]|1[ABCGHJ-MPRSV-Y]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NPRZ]|4[ABCEGHJLNPRSTVX]|5[ABCEGHJ-NPRSTV-Z]|6[ABCEGHJ-NPRSTVWX]|7[AENPSVXYZ]|8[ABCEGHLNRSVWX]|9[ACEGHJKMNSVWX])|V(0[ABCEGHJ-NPRSTVWX]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NRSTV-Y]|4[ABCEGK-NPRSTVWXZ]|5[ABCEGHJ-NPRSTV-Z]|6[ABCEGHJ-NPRSTV-Z]|7[ABCEGHJ-NPRSTV-Y]|8[ABCGJ-NPRSTV-Z]|9[ABCEGHJ-NPRSTV-Z])|X(0[ABCGX]|1[A])|Y(0[AB]|1[A]))[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$
  • 미국 우편 번호

    ^[0-9]{5}(-[0-9]{4})?$
  • 영국 우편 번호

    ^([A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\ [0-9][ABD-HJLNP-UW-Z]{2}|(GIR\ 0AA)|(SAN\ TA1)|(BFPO\ (C\/O\ )?[0-9]{1,4})|((ASCN|BBND|[BFS]IQQ|PCRN|STHL|TDCU|TKCA)\ 1ZZ))$

실제로 주소로 무언가를 우편으로 보내거나받는 사람에게 알려주지 않으면 정확성을 보장 할 수 없지만, 우리가 나쁜 것으로 알고있는 사례를 제거하여 범위를 좁힐 수 있습니다.


캐나다 우편 번호의 확장 버전에는 다음과 같은 우편 번호가 유효하지 않다고 잘못 표시되거나 누락 될 수 있습니다. E3G 0A1 (유효한 코드 임).
fsschmitt

캐나다의 모든 845,495 우편 번호에 대해 유효성을 검사했으며이 정규식 문자열에는 이러한 모든 우편 번호를 지원하기위한 확장 유효성 검사에 대한 수정 사항이 있습니다. 다음은 캐나다 우편 코드에 대한 확장 된 검증을 위해 새로운 정규식 문자열 : pastebin.com/vazqFKy4
fsschmitt은

14

Regex에는 없지만 좋은 참조처럼 보입니다 .

실제로 사용자에게 실제로 물건을 배송 하지 않는 한 노력할만한 가치가 있다고 생각하지 않습니다. 당신이 만약 됩니다 를 출시, 자신에이 방법을 더 쉽게 만드는 당신이로 볼 수 주소 청소 도구 / 서비스가있다.


또한 현재 우편 번호가 정확하더라도 나중에 변경 될 수 있습니다. USPS는 지속적으로 새로운 것을 추가하고 영역을 나누고 있습니다. 유지할 수있는 유일한 방법은 실제로 물건을 배송 할 때 확인하는 것입니다. 일부 도시에서는 다양한 이유로 자신의 우편 번호를 변경하기도합니다.
NotMe

누군가가 위에 게시 한 wiki 기사를 가져 와서 각 국가의 우편 번호 우편 번호를 사용하여 JSON으로 출력 한 것 같습니다-gist.github.com/matthewbednarski/…
Chris Smith

8

우리는 다음을 사용합니다.

캐나다

([A-Z]{1}[0-9]{1}){3}   //We raise to upper first

미국

[0-9]{5}                //-or-
[0-9]{5}-[0-9]{4}       //10 digit zip

다른

있는 그대로 수락


1
선택적-[0-9] {4}를 미국에 추가하는 것이 좋습니다. 어떤 사람들은 ZIP + 4를 사용합니다.
David Thornley

4
/ [0-9] {5} (? :-[0-9] {4})? /를 사용하면 미국에서 두 스타일을 동시에 확인할 수 있습니다.
Chas. Owens

2
@ Chas.Owens는 ^과 $를 추가하여 "12345aaa"와 같이 전후에 다른 것을 입력 할 수 없도록합니다 ... / ^ [0-9] {5} (? :-[0-9] {4}) ? $ /
Tim Franklin

7

응용 프로그램에 따라 대부분의 방문자가 방문한 국가에 대해 정규식 일치를 구현하고 나머지는 검증하지 않을 수 있습니다 (아무것도 허용).


6
.* 

Big Jump는 줄 바꿈, 공백 및 제어 문자를 잊었습니다.

국제 우편 번호는 일종의 정지 문제입니다.


6

허용 된 답변에 명시된 바와 같이 이것은 매우 어려운 문제입니다. 그래도 geonames.org에 있는 사람들을 방해하지 않았다고 생각합니다 . 그들은 국가 정보 파일을 가지고 있으며 ,이 답변에 전체적으로 맞지 않습니다-한도는 30000 자입니다. 약 150 개국에 대한 정규식이 있습니다.

이 질문과 관련된 비트를 여기에서 추출했습니다.

AD ^(?:AD)*(\d{3})$
AM ^(\d{6})$
AR ^([A-Z]\d{4}[A-Z]{3})$
AT ^(\d{4})$
AU ^(\d{4})$
AX ^(?:FI)*(\d{5})$
AZ ^(?:AZ)*(\d{4})$
BA ^(\d{5})$
BB ^(?:BB)*(\d{5})$
BD ^(\d{4})$
BE ^(\d{4})$
BG ^(\d{4})$
BH ^(\d{3}\d?)$
BM ^([A-Z]{2}\d{2})$
BN ^([A-Z]{2}\d{4})$
BR ^(\d{8})$
BY ^(\d{6})$
CA ^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]) ?(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$
CH ^(\d{4})$
CL ^(\d{7})$
CN ^(\d{6})$
CR ^(\d{4})$
CU ^(?:CP)*(\d{5})$
CV ^(\d{4})$
CX ^(\d{4})$
CY ^(\d{4})$
CZ ^(\d{5})$
DE ^(\d{5})$
DK ^(\d{4})$
DO ^(\d{5})$
DZ ^(\d{5})$
EC ^([a-zA-Z]\d{4}[a-zA-Z])$
EE ^(\d{5})$
EG ^(\d{5})$
ES ^(\d{5})$
ET ^(\d{4})$
FI ^(?:FI)*(\d{5})$
FM ^(\d{5})$
FO ^(?:FO)*(\d{3})$
FR ^(\d{5})$
GB ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
GE ^(\d{4})$
GF ^((97|98)3\d{2})$
GG ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
GL ^(\d{4})$
GP ^((97|98)\d{3})$
GR ^(\d{5})$
GT ^(\d{5})$
GU ^(969\d{2})$
GW ^(\d{4})$
HN ^([A-Z]{2}\d{4})$
HR ^(?:HR)*(\d{5})$
HT ^(?:HT)*(\d{4})$
HU ^(\d{4})$
ID ^(\d{5})$
IL ^(\d{5})$
IM ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
IN ^(\d{6})$
IQ ^(\d{5})$
IR ^(\d{10})$
IS ^(\d{3})$
IT ^(\d{5})$
JE ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
JO ^(\d{5})$
JP ^(\d{7})$
KE ^(\d{5})$
KG ^(\d{6})$
KH ^(\d{5})$
KP ^(\d{6})$
KR ^(?:SEOUL)*(\d{6})$
KW ^(\d{5})$
KZ ^(\d{6})$
LA ^(\d{5})$
LB ^(\d{4}(\d{4})?)$
LI ^(\d{4})$
LK ^(\d{5})$
LR ^(\d{4})$
LS ^(\d{3})$
LT ^(?:LT)*(\d{5})$
LU ^(\d{4})$
LV ^(?:LV)*(\d{4})$
MA ^(\d{5})$
MC ^(\d{5})$
MD ^(?:MD)*(\d{4})$
ME ^(\d{5})$
MG ^(\d{3})$
MK ^(\d{4})$
MM ^(\d{5})$
MN ^(\d{6})$
MQ ^(\d{5})$
MT ^([A-Z]{3}\d{2}\d?)$
MV ^(\d{5})$
MX ^(\d{5})$
MY ^(\d{5})$
MZ ^(\d{4})$
NC ^(\d{5})$
NE ^(\d{4})$
NF ^(\d{4})$
NG ^(\d{6})$
NI ^(\d{7})$
NL ^(\d{4}[A-Z]{2})$
NO ^(\d{4})$
NP ^(\d{5})$
NZ ^(\d{4})$
OM ^(\d{3})$
PF ^((97|98)7\d{2})$
PG ^(\d{3})$
PH ^(\d{4})$
PK ^(\d{5})$
PL ^(\d{5})$
PM ^(97500)$
PR ^(\d{9})$
PT ^(\d{7})$
PW ^(96940)$
PY ^(\d{4})$
RE ^((97|98)(4|7|8)\d{2})$
RO ^(\d{6})$
RS ^(\d{6})$
RU ^(\d{6})$
SA ^(\d{5})$
SD ^(\d{5})$
SE ^(?:SE)*(\d{5})$
SG ^(\d{6})$
SH ^(STHL1ZZ)$
SI ^(?:SI)*(\d{4})$
SK ^(\d{5})$
SM ^(4789\d)$
SN ^(\d{5})$
SO ^([A-Z]{2}\d{5})$
SV ^(?:CP)*(\d{4})$
SZ ^([A-Z]\d{3})$
TC ^(TKCA 1ZZ)$
TH ^(\d{5})$
TJ ^(\d{6})$
TM ^(\d{6})$
TN ^(\d{4})$
TR ^(\d{5})$
TW ^(\d{5})$
UA ^(\d{5})$
US ^\d{5}(-\d{4})?$
UY ^(\d{5})$
UZ ^(\d{6})$
VA ^(\d{5})$
VE ^(\d{4})$
VI ^\d{5}(-\d{4})?$
VN ^(\d{6})$
WF ^(986\d{2})$
YT ^(\d{5})$
ZA ^(\d{4})$
ZM ^(\d{5})$
CS ^(\d{5})$

잘만되면 나는 실수하지 않았다. 나의 정규 표현식은 꽤 약하다.


1
프랑스와 영국의 정규식은 가능한 공간을 고려하지 않습니다. 프랑스에서는 우편 번호를 두 번째와 세 번째 숫자 사이에 공백으로 입력 할 수 있습니다 (예 : 75001 대신 75001). 영국 우편 번호는 공백으로 작성되는 경우가 많습니다 (예 : SW11AA 대신 SW1 1AA).
salcoin

@salcoin 입력에 감사드립니다 (프랑스어인데도). 이와 관련하여 Chi의 대답이 더 나은 것 같습니다.
nha

공간이없는 공간을 str_replace하면 슈퍼 세금이 부과되기 때문에? : p
Robert Pounder

6

누군가 우편 번호를 확인하는 방법에 여전히 관심이 있다면 해결책을 찾았습니다.

사용하여 국가 코드우편 번호 자체를 Google Geocoding API가진 우편 번호의 유효성을 확인할 수 있습니다 .

예를 들어 우크라이나에 거주하므로 다음과 같이 확인할 수 있습니다. https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:80380|country:UA

또는 JS API 사용 : https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering

80380우크라이나의 유효한 ZIP은 어디에 있습니까? 실제로 모든 (#####)은 유효합니다.

ZERO_RESULTS아무것도 찾지 못하면 Google에서 상태를 반환 합니다. 또는 OK둘 다 맞으면 결과입니다.

이것이 도움이 되길 바랍니다.


유일한 문제는 사이트 / 크기에 따라 문제가 될 수있는 쿼리 수의 제한입니다.
Darryl Hein

@DarrylHein 물론 그것은 작동하게하기 위해 지금 꽤 큰 가격입니다 =)
Romko

4

다른 사람들이 지적했듯이, 하나의 정규 표현식이 그들을 모두 지배하지는 않습니다. 그러나 잘 알려진 UN 대행사 인 Universal Postal Union주소 형식 정보를 사용하여 필요한만큼 많은 국가에서 정규 표현식을 작성할 수 있습니다 .

예를 들어 다음은 소수의 국가에 대한 우편 번호를 포함한 주소 형식 규칙입니다 (PDF 형식).


2

문제는 지구 반대편에있는 국가의 우편 번호 요구 사항에 대응할 수있는 좋은 방법이없고 공통 언어를 공유하지 않는 것입니다. 이를 추적하기에 예산이 충분하지 않은 경우 Google 또는 yahoo에 주소를 확인하는 책임을 맡는 것이 좋습니다.

두 회사 모두 프로그래밍 가능한 API를 통해 주소 조회 기능을 제공합니다.


1

왜 이런 짓을하고 왜 신경 쓰나요? Tom Ritter가 지적했듯이 실제로 우편 주소가 있는지 여부에 관계없이 우편 번호가 있는지 여부는 중요하지 않습니다. 언젠가 당신이 그들에게 무언가를 보낼 것이라고 기대하더라도 , 그것이 오늘날 우편 번호가 필요하다는 것을 의미하지는 않습니다 .


예, 그러나 그들이 입력 할 예정이라면 그 시점에서 그것이 올바른지 확인하십시오. 그러나 나는 기본적으로 다른 답변 중 하나에 동의합니다. 고객의 대다수가 될 것이라고 생각하는 국가에 대해 유효성을 검사하십시오.
cdmckay

1
일부 신용 청산 소는 우편 번호가 정확하지 않으면 청구서를받지 않습니다. 요금을 제출하고 거부하지 않고 입력시 우편 번호를 확인하려고합니다.
SamGoody

1

다른 곳에서 언급했듯이 전 세계의 변화는 엄청납니다. 패턴과 일치하는 것이 존재한다는 의미는 아닙니다.

물론 우편 번호를 사용하지 않는 곳이 많이 있습니다 (예 : 많거나 아일랜드).


실제로 D1, D2 등은이 코드와 거리 번호 만 사용하여 주소를 식별 할 수 없기 때문에 D1, D2 등이 올바른 우편 번호로 간주된다고 생각하기 때문에 아마 아일랜드 전체가 아마.
Dónal

1

정확한 우편 번호를 가지고 배송 이외의 이유가 있습니다. 국경을 넘어 여행을하는 여행사 (물론 유로존은 제외)는 당국에 제공하기 위해 미리이 정보가 필요합니다. 이 정보는 종종 그러한 것들에 익숙하거나 익숙하지 않은 에이전트에 의해 입력됩니다. 실수를 줄일 수있는 모든 방법은 Good Idea ™입니다

그러나 세계의 모든 우편 번호를 다루는 정규식을 작성하는 것은 미쳤습니다.


1
버그가 있거나 우편 번호가 변경 되었기 때문에 코드가 유효한 우편 번호를 거부하기 시작할 때까지만 좋습니다. 유효성 검사는 옳거나 없어야하는 것입니다. 최소한 재정의 옵션이 있어야합니다.
Chas. Owens

1

각 국가마다 많은 엣지 사례가 있다고 가정하면 (예 : 런던 주소가 영국의 다른 지역과 약간 다른 형식을 사용할 수 있음) 다른 정규 표현식이 있다고 생각하지 않습니다.

[0-9a-zA-Z]+

상당히 넓은 패턴을 사용하는 것이 가장 좋으며 (위와 같이 광범위하지는 않음) 각 국가 / 지역을 고유 한 패턴으로 처리하십시오!

업데이트 : 그러나 많은 작은 지역별 규칙을 기반으로 정규 표현식을 동적으로 구성하는 것이 가능할 수 있습니다.

RegExLib 사이트 에서 많은 국가 별 패턴을 찾을 수 있습니다 .


1

누군가 우편 주소 형식 목록에 대해 묻고 있었는데, 이것이 그가 찾고 있던 것이라고 생각합니다.

우편 주소에 대한 Frank의 강박 안내서 : http://www.columbia.edu/~fdc/postal/ 그러나 거리 문제에 대해서는별로 도움이되지 않습니다.

내 작업은이를 지원하기 위해 몇 가지 도구를 사용합니다.-NCOA 조회를 포함한 Lexis-Nexis 서비스 ( "무료"에 대한 주소 표준화를 얻을 수 있음)- "Melissa Data" http://www.melissadata.com


1

이것은 미국 우편 번호 (ZipCode Plus Four가 아님)를 검증하기위한 매우 간단한 RegEx입니다.

(?!([089])\1{4})\d{5}

5 자리 숫자가 모두 유효한 우편 번호 인 것 같습니다 00000. 88888&99999 .

이 정규식을 테스트했습니다. http://regexpal.com/에서

SP


이 RegEx는 zip + 4 부분에 대해 네 자리 숫자를 적용하지 않습니다. 예를 들어 "92122-1"은 유효한 우편 번호로 간주됩니다.
Sensei James

0

Zip Code문자 및 숫자 (영숫자)를 허용하는 경우 정규식 아래에서 하나의 하이픈 ( -)으로 5 또는 9 또는 10 개의 영숫자 문자를 사용합니다 .

^([0-9A-Za-z]{5}|[0-9A-Za-z]{9}|(([0-9a-zA-Z]{5}-){1}[0-9a-zA-Z]{4}))$
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.