รหัสไปรษณีย์และรหัสไปรษณีย์สุดยอดคืออะไร


201

ฉันกำลังมองหาสุดยอดรหัสไปรษณีย์และรหัสไปรษณีย์ของ regex ฉันกำลังมองหาบางสิ่งที่จะครอบคลุมมากที่สุด (หวังว่าทุกคน) ของโลก


4
regex เดียวสำหรับรหัสไปรษณีย์ทั้งหมดจะไร้ประโยชน์ในกรณีส่วนใหญ่ไม่ต้องพูดถึงต้องใช้การเข้ารหัส Unicode จำนวนมาก ดีกว่ามากคือการตรวจสอบ regex ตามแต่ละประเทศเพื่อให้คุณไม่ตรวจสอบสิ่งต่าง ๆ เช่น "New York, NY AF23Q" อย่างถูกต้อง
ใช่ - เจคนั่น

101
คุณมีปัญหา. คุณเขียน regex สำหรับมัน ตอนนี้คุณมีสองปัญหา
Robert S.

regexlib.com/Search.aspx?k=decimal&c=3&m=-1&ps=100สำหรับตรวจสอบความถูกต้องของฟิลด์ไปที่นี่
Dinesh Kumar

2
อันที่จัดการค่าในอนาคตที่เป็นไปได้ทั้งหมด
Jodrell

คำตอบ:


127

ไม่มีเลย

รหัสไปรษณีย์ / ไปรษณีย์ทั่วโลกไม่เป็นไปตามรูปแบบทั่วไป ในบางประเทศพวกเขาถูกสร้างขึ้นโดยตัวเลขในคนอื่น ๆ พวกเขาสามารถรวมกันของตัวเลขตัวอักษรบางคนสามารถมีช่องว่างจุดอื่น ๆ จำนวนตัวอักษรสามารถแตกต่างกันตั้งแต่สองถึงอย่างน้อยหก ...

สิ่งที่คุณสามารถทำได้ (ในทางทฤษฎี) คือสร้าง regex แยกสำหรับทุกประเทศในโลกไม่ใช่ IMO ที่แนะนำได้ แต่คุณจะยังขาดหายไปในส่วนการตรวจสอบความถูกต้อง: 12345อาจมีรหัสไปรษณีย์แต่12346อาจ12344ไม่มีอยู่ก็ได้ คุณตรวจสอบสิ่งนั้นด้วย regex อย่างไร

คุณทำไม่ได้


ฉันสงสัยว่า regex สามารถรวบรวมได้ แต่งานแบบนี้เหมาะกว่าสำหรับฐานข้อมูล Regex จะมีหน้าตาเหมือน 10,000 | 1,0001 | 10002 | 10003 | .......
Kibbee

สำหรับการตรวจสอบความถูกต้องของฟิลด์ไปที่นี่regexlib.com/Search.aspx?k=decimal&c=3&m=-1&ps=100
Dinesh Kumar

คุณสามารถใช้ regexp ก่อนที่ตรงกับประเทศของคุณ (ดูen.wikipedia.org/wiki/List_of_postal_codes ) และทำการตรวจสอบจริงโดยบริการภายนอกเช่นgeonames.org/export/ws-overview.html
SimonSimCity

3
สองเซนต์ของฉัน: ในบราซิลเป็นจริงหมายเลข 8, 5 ตามด้วยเส้นประและอีก 3
Jorge Campos

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

260

unicode CLDR ประกอบด้วย regex รหัสไปรษณีย์สำหรับแต่ละประเทศ (รวม 158 regex!)

Google ยังมีบริการเว็บที่มีข้อมูลการจัดรูปแบบที่อยู่ต่อประเทศรวมถึงรหัสไปรษณีย์ที่นี่ - http://i18napis.appspot.com/address (ฉันพบลิงค์นั้นผ่านhttp://unicode.org/review/pri180/ )

แก้ไข

นี่คือสำเนาของZIPCodeData.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-regex อย่างรวดเร็ว ... regex นี้ง่ายมากและจะยอมให้มีการบวกเท็จมากมายดังนั้นจึงไม่ครบถ้วนสมบูรณ์
Taryn East

7
Unicode CLDR เวอร์ชันล่าสุดที่มีรหัสไปรษณีย์ regex คือรุ่น 26.0.1 ในรุ่นที่ใหม่กว่าจะถูกลบออกเนื่องจากข้อมูลไม่ได้รับการบำรุงรักษาและไม่พบแหล่งที่เชื่อถือได้อื่น ๆ
ซอฟต์แวร์ KIKO

1
เหมือนกันพื้นฐานมากสำหรับฝรั่งเศสรหัสไปรษณีย์ regex ใช้อันนี้ "^ ((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 ซอฟแวร์ของ: รุ่นล่าสุดที่มีข้อมูลรหัสไปรษณีย์เป็น27.0.3
Sietse

89

ใช้ regx เหล่านี้

$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 แนะนำเช่นเดียวกับที่คุณเลือก regexes จากรหัสประเทศ
Thomaschaaf

2
ฉันเห็นคุณโพสต์สิ่งนี้ในปี 2012 มีมากกว่านี้อีกไหม
rybo111

@ rybo111 ตรวจสอบคำตอบจิ
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 เป็นที่ถูกต้องแคนาดารหัสไปรษณีย์ (ที่เด็กใช้ในการรับจดหมายจากแคนาดาโพสต์ทำท่าจะเป็นซานตาคลอส) แต่ไม่ได้หมายความว่ามันเป็นรหัสไปรษณีย์ของลูกค้าที่ถูกต้อง :)
นีล McGuigan

2
FYI, American Samoa มีขนาดเล็กพอที่จะมีรหัสไปรษณีย์เดียวเท่านั้นและเป็น 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 รายการในแคนาดาและสตริง regex นี้มีการแก้ไขบางอย่างเกี่ยวกับการตรวจสอบเพิ่มเติมเพื่อรองรับรหัสไปรษณีย์เหล่านี้ทั้งหมด นี่คือสตริง regex ใหม่สำหรับการตรวจสอบเพิ่มเติมในรหัสไปรษณีย์ของแคนาดา: pastebin.com/vazqFKy4
fsschmitt

14

ดูเหมือนว่าข้อมูลอ้างอิงที่ดีแม้ว่าจะไม่ได้อยู่ใน Regex

จริง ๆ ยกเว้นว่าคุณจะจัดส่งอะไรบางอย่างให้กับผู้ใช้ของคุณฉันไม่คิดว่ามันจะคุ้มค่า และหากคุณกำลังจัดส่งมีเครื่องมือ / บริการทำความสะอาดที่อยู่ที่คุณสามารถตรวจสอบเพื่อให้ง่ายขึ้น


นอกจากนี้แม้ว่าจะเป็นรหัสไปรษณีย์ที่ถูกต้องในวันนี้ แต่ก็อาจมีการเปลี่ยนแปลงได้ในอนาคต USPS กำลังเพิ่มพื้นที่ใหม่และพื้นที่แยกอย่างต่อเนื่อง วิธีเดียวที่คุณสามารถติดตามคือการตรวจสอบในเวลาที่คุณจัดส่งสินค้าจริง บางเมืองเลือกที่จะเปลี่ยนรหัสไปรษณีย์ของตนเองด้วยเหตุผลหลายประการ
NotMe

ดูเหมือนว่ามีคนเอาบทความวิกิพีเดียที่คุณโพสต์ข้างต้นและการส่งออกไปยัง JSON ด้วย / รหัสไปรษณีย์ regex ไปรษณีย์สำหรับแต่ละประเทศ - gist.github.com/matthewbednarski/...
คริสสมิ ธ

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

ขึ้นอยู่กับแอปพลิเคชันของคุณคุณอาจต้องการใช้การจับคู่ regex สำหรับประเทศที่ผู้เข้าชมส่วนใหญ่ของคุณมาและไม่มีการตรวจสอบส่วนที่เหลือ (ยอมรับอะไรเลย)


6
.* 

บิ๊กกระโดดลืมเกี่ยวกับตัวแบ่งบรรทัดช่องว่างและตัวควบคุม

รหัสไปรษณีย์ระหว่างประเทศเป็นปัญหาการหยุดชะงัก


6

โปรดทราบว่านี่เป็นปัญหาที่ยากมากตามที่ระบุไว้โดยคำตอบที่ยอมรับ ฉันคิดว่ามันไม่ได้ขัดขวางคนที่geonames.orgแม้ว่า พวกเขามีไฟล์ไฟล์ข้อมูลประเทศซึ่งไม่พอดีกับคำตอบนี้ - ขีด จำกัด อยู่ที่ 30,000 ตัวอักษร มี regexes ประมาณ 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})$

หวังว่าฉันจะไม่ทำผิดพลาด regex-fu ของฉันนั้นค่อนข้างอ่อนแอ


1
ฉันต้องการจะชี้ให้เห็นว่า regex สำหรับฝรั่งเศสและสหราชอาณาจักรไม่ได้คำนึงถึงช่องว่างที่เป็นไปได้; ในฝรั่งเศสสามารถป้อนรหัสไปรษณีย์ด้วยช่องว่างระหว่างตัวเลขสองและสาม (เช่น 75 001 แทน 75001) รหัสไปรษณีย์ของอังกฤษมักเขียนด้วยช่องว่าง (เช่น SW1 1AA แทน SW11AA)
salcoin

@salcoin ขอบคุณสำหรับข้อมูลที่ฉันไม่ได้สังเกตเห็นว่า (แม้ว่าฉันจะเป็นภาษาฝรั่งเศส) ดูเหมือนว่าคำตอบของจิจะดีกว่าในเรื่องนี้
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เป็นไปรษณีย์ที่ถูกต้องสำหรับยูเครนจริงทุก (#####) เป็นที่ถูกต้อง

Google จะแสดงZERO_RESULTSสถานะหากไม่พบสิ่งใด หรือOKและผลลัพธ์หากทั้งคู่ถูกต้อง

หวังว่านี่จะเป็นประโยชน์


ปัญหาเพียงอย่างเดียวคือข้อ จำกัด เกี่ยวกับจำนวนข้อความค้นหาซึ่งขึ้นอยู่กับไซต์ / ขนาดอาจเป็นปัญหา
Darryl Hein

@DarrylHein แน่นอน แต่ตอนนี้มันค่อนข้างใหญ่ที่จะทำให้มันใช้งานได้ =)
Romko

4

ดังที่คนอื่น ๆ ชี้ให้เห็น regex หนึ่งการปกครองพวกเขาทั้งหมดไม่น่า อย่างไรก็ตามคุณสามารถสร้างการแสดงออกปกติสำหรับหลาย ๆ ประเทศตามที่คุณต้องการโดยใช้ข้อมูลการจัดรูปแบบที่อยู่จากสหภาพไปรษณีย์สากล - หน่วยงานสหประชาชาติที่รู้จักกันน้อย

ตัวอย่างเช่นต่อไปนี้เป็นกฎการจัดรูปแบบที่อยู่รวมถึงรหัสไปรษณีย์สำหรับประเทศต่างๆ (รูปแบบ PDF):


2

ปัญหาเป็นไปได้ว่าคุณอาจไม่มีวิธีที่ดีในการติดตามความต้องการรหัสไปรษณีย์ที่เปลี่ยนแปลงของประเทศต่างๆในอีกด้านหนึ่งของโลกและคุณไม่มีภาษาที่ใช้ร่วมกัน นอกจากว่าคุณจะมีงบประมาณมากพอที่จะติดตามเรื่องนี้คุณเกือบจะดีกว่าที่จะให้ความรับผิดชอบในการตรวจสอบที่อยู่กับ Google หรือ yahoo

บริษัท ทั้งสองจัดหาการค้นหาที่อยู่ผ่าน API ที่ตั้งโปรแกรมได้


1

ทำไมคุณถึงทำเช่นนี้และทำไมคุณถึงสนใจ? ดังที่ Tom Ritter ชี้ให้เห็นมันไม่สำคัญว่าคุณจะมีรหัสไปรษณีย์หรือแม้แต่น้อยก็ตามไม่ว่าจะถูกต้องหรือไม่ก็ตามจนกว่าคุณจะส่งบางสิ่งไปยังที่อยู่นั้นจริงหรือไม่ แม้ว่าคุณจะคาดหวังว่าคุณจะส่งพวกเขาสิ่งที่สักวันหนึ่งที่ไม่ได้หมายความว่าคุณจะต้องมีรหัสไปรษณีย์ในวันนี้


ใช่ แต่ถ้าพวกเขากำลังจะเข้ามาหนึ่งอาจตรวจสอบให้แน่ใจว่ามันถูกต้องในจุดนั้น อย่างไรก็ตามฉันเห็นด้วยกับหนึ่งในคำตอบอื่น ๆ ที่โดยทั่วไปบอกให้ตรวจสอบสำหรับประเทศที่คุณคิดว่าจะเป็นลูกค้าส่วนใหญ่ของคุณ
cdmckay

1
สำนักหักบัญชีเครดิตบางแห่งจะไม่รับใบเสร็จยกเว้นว่ารหัสไปรษณีย์นั้นถูกต้อง ฉันต้องการตรวจสอบความถูกต้องของรหัสไปรษณีย์แทนที่จะส่งค่าใช้จ่ายและปฏิเสธ
SamGoody

1

ตามที่ระบุไว้ที่อื่นการเปลี่ยนแปลงทั่วโลกมีขนาดใหญ่มาก และแม้ว่าสิ่งที่ตรงกับรูปแบบไม่ได้หมายความว่ามันมีอยู่

แน่นอนว่ามีหลายสถานที่ที่ไม่ได้ใช้รหัสไปรษณีย์ (เช่นมากหรือไอร์แลนด์)


ที่จริงแล้วไอร์แลนด์ทั้งหมดอาจเป็นเพราะฉันไม่คิดว่า D1, D2 และอื่น ๆ ถือว่าเป็นรหัสไปรษณีย์ที่ถูกต้องเนื่องจากคุณไม่สามารถระบุที่อยู่โดยใช้เพียงรหัสนี้และหมายเลขถนน
Dónal

1

มีเหตุผลที่นอกเหนือจากการจัดส่งเนื่องจากมีรหัสไปรษณีย์ที่ถูกต้อง หน่วยงานการท่องเที่ยวที่ทำทัวร์ที่ข้ามพรมแดน (ยูโรโซนยกเว้นแน่นอน) ต้องการข้อมูลนี้ล่วงหน้าเพื่อมอบให้กับเจ้าหน้าที่ บ่อยครั้งที่ข้อมูลนี้ถูกป้อนโดยตัวแทนที่อาจหรืออาจไม่คุ้นเคยกับสิ่งต่าง ๆ วิธีการใดก็ได้ที่สามารถลดข้อผิดพลาดได้คือ Good Idea ™

อย่างไรก็ตามการเขียน regex ที่จะครอบคลุมรหัสไปรษณีย์ทั้งหมดในโลกจะเสียสติ


1
เป็นความคิดที่ดีจนกระทั่งรหัสเริ่มปฏิเสธรหัสไปรษณีย์ที่ถูกต้องเพราะเป็นรถเข็นหรือรหัสไปรษณีย์มีการเปลี่ยนแปลง การตรวจสอบความถูกต้องเป็นสิ่งที่ต้องถูกต้องหรือไม่มีเลย อย่างน้อยที่สุดควรมีตัวเลือกแทนที่
Chas Owens

1

เนื่องจากมีหลายกรณีที่เกิดขึ้นจริงสำหรับแต่ละประเทศ (เช่นที่อยู่ในลอนดอนอาจใช้รูปแบบที่แตกต่างกันเล็กน้อยสำหรับส่วนที่เหลือของสหราชอาณาจักร) ฉันไม่คิดว่าจะมี regex ขั้นสูงสุดนอกเหนือจาก:

[0-9a-zA-Z]+

ดีที่สุดในการไปกับรูปแบบที่ค่อนข้างเป็นธรรม (ไม่กว้างเท่าที่กล่าวข้างต้น) หรือปฏิบัติต่อแต่ละประเทศ / ภูมิภาคด้วยรูปแบบเฉพาะของมันเอง!

อัปเดต: อย่างไรก็ตามอาจเป็นไปได้ที่จะสร้าง regex แบบไดนามิกโดยยึดตามกฎเฉพาะของภูมิภาคที่เล็กลงจำนวนมาก - ไม่แน่ใจว่าเกี่ยวกับประสิทธิภาพ!

รูปแบบเฉพาะของประเทศจำนวนมากสามารถพบได้ในไซต์RegExLib


1

มีคนถามเกี่ยวกับรายการการจัดรูปแบบที่อยู่ทางไปรษณีย์และฉันคิดว่านี่คือสิ่งที่เขากำลังมองหา ...

คู่มือบังคับของแฟรงค์ไปยังที่อยู่ไปรษณีย์: http://www.columbia.edu/~fdc/postal/ ไม่ได้ช่วยอะไรมากมายเกี่ยวกับปัญหาระดับถนนอย่างไรก็ตาม

งานของฉันใช้เครื่องมือสองสามอย่างเพื่อช่วยในเรื่องนี้: - บริการ Lexis-Nexis รวมถึงการค้นหา NCOA (คุณจะได้รับมาตรฐานที่อยู่สำหรับ "ฟรี") - "Melissa Data" http://www.melissadata.com


1

นี่เป็น RegEx ที่ง่ายมากสำหรับการตรวจสอบรหัสไปรษณีย์ของสหรัฐอเมริกา (ไม่ใช่ ZipCode Plus Four):

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

ดูเหมือนว่าทั้งห้าบาทเป็นตัวเลข zipcodes ต้องยกเว้น00000, และ8888899999

ฉันได้ทดสอบ RegEx นี้ด้วยhttp://regexpal.com/

SP


RegEx นี้ไม่บังคับใช้สี่หลักสำหรับส่วน zip + 4 เช่นจะพิจารณารหัสไปรษณีย์ที่ถูกต้อง "92122-1"
อาจารย์เจมส์

0

หากZip Codeอนุญาตให้ตัวอักษรและตัวเลข (ตัวอักษรและตัวเลข) ด้านล่าง regex จะใช้ตรงกับที่มัน 5 หรือ 9 หรือ 10 ตัวอักษรและตัวเลขที่มีหนึ่ง hypen ( -):

^([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.