อาจซ้ำกันได้:
รหัสไปรษณีย์และนิพจน์ทั่วไปที่ดีที่สุดคืออะไร?
ฉันต้องการ Regex ซึ่งสามารถตอบสนองเงื่อนไขทั้งสามประการของฉันสำหรับรหัสไปรษณีย์ เช่น-
- 12345
- 12345-6789
- 12345 1234
คำแนะนำและข้อเสนอแนะใด ๆ จะได้รับการชื่นชมมาก ขอบคุณ!
อาจซ้ำกันได้:
รหัสไปรษณีย์และนิพจน์ทั่วไปที่ดีที่สุดคืออะไร?
ฉันต้องการ Regex ซึ่งสามารถตอบสนองเงื่อนไขทั้งสามประการของฉันสำหรับรหัสไปรษณีย์ เช่น-
คำแนะนำและข้อเสนอแนะใด ๆ จะได้รับการชื่นชมมาก ขอบคุณ!
คำตอบ:
^\d{5}(?:[-\s]\d{4})?$
^
= จุดเริ่มต้นของสตริง\d{5}
= จับคู่ 5 หลัก (สำหรับเงื่อนไข 1, 2, 3)(?:…)
= การจัดกลุ่ม[-\s]
= จับคู่ช่องว่าง (สำหรับเงื่อนไข 3) หรือยัติภังค์ (สำหรับเงื่อนไข 2)\d{4}
= จับคู่ 4 หลัก (สำหรับเงื่อนไข 2, 3)…?
= รูปแบบก่อนที่จะเป็นทางเลือก (สำหรับเงื่อนไข 1)$
= จุดสิ้นสุดของสตริง\s
จะตรงกับช่องว่างใด ๆ รวมถึงแท็บและบรรทัดใหม่
00544
รหัสไปรษณีย์ที่ถูกต้อง 544
ไม่ใช่.
/(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
สำหรับเงื่อนไขสามข้อที่แสดงรายการเท่านั้นนิพจน์เหล่านี้อาจใช้ได้:
^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$
หากเรามีช่องว่างเพิ่มเติมที่ไม่คาดคิดระหว่าง 5 ถึง 4 หลักหรือรหัสไปรษณีย์ 9 หลักที่ต่อเนื่องกันเช่น:
123451234
12345 1234
12345 1234
ตัวอย่างเช่นนิพจน์นี้จะเป็นตัวเลือกรองที่มีข้อ จำกัด น้อยกว่า:
^\d{5}([-]|\s*)?(\d{4})?$
jex.imแสดงภาพนิพจน์ทั่วไป:
const regex = /^\d{5}[-\s]?(?:\d{4})?$/gm;
const str = `12345
12345-6789
12345 1234
123451234
12345 1234
12345 1234
1234512341
123451`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
ฉันรู้ว่าสิ่งนี้อาจชัดเจนสำหรับคนส่วนใหญ่ที่ใช้ RegEx เป็นประจำ แต่ในกรณีที่ผู้อ่านยังใหม่กับ RegEx ฉันคิดว่าฉันควรชี้ให้เห็นข้อสังเกตที่ฉันทำซึ่งเป็นประโยชน์สำหรับหนึ่งในโครงการของฉัน
ในคำตอบก่อนหน้านี้จาก @kennytm:
^\d{5}(?:[-\s]\d{4})?$
... ? = รูปแบบก่อนที่จะเป็นทางเลือก (สำหรับเงื่อนไข 1)
หากคุณต้องการอนุญาตทั้ง 5 หลักมาตรฐานและรหัสไปรษณีย์ +4 นี่เป็นตัวอย่างที่ดี
หากต้องการจับคู่เฉพาะรหัสไปรษณีย์ในรูปแบบ 'Zip + 4' ของสหรัฐอเมริกาตามที่ฉันต้องการ (เงื่อนไข 2 และ 3 เท่านั้น) ให้ลบรหัสสุดท้ายออก?
เพื่อให้ตรงกับกลุ่มอักขระ 5 ตัวสุดท้ายเสมอ
เครื่องมือที่มีประโยชน์ที่ฉันแนะนำสำหรับการซ่อมแซม RegEx มีลิงก์ด้านล่าง:
ฉันใช้เครื่องมือนี้บ่อยเมื่อพบ RegEx ที่ทำอะไรคล้าย ๆ กับที่ฉันต้องการ แต่สามารถปรับแต่งให้ดีขึ้นได้เล็กน้อย นอกจากนี้ยังมีเมนูอ้างอิง RegEx ที่ดีและอินเทอร์เฟซข้อมูลที่ช่วยให้คุณทราบว่าการเปลี่ยนแปลงของคุณส่งผลต่อการจับคู่ข้อความตัวอย่างที่คุณป้อนอย่างไร
หากฉันมีอะไรผิดพลาดหรือพลาดข้อมูลสำคัญโปรดแก้ไขฉัน
\d{5}([ \-]\d{4})?
สหรัฐ