Có thể trùng lặp:
Mã bưu chính cuối cùng và zip regex là gì?
Tôi cần Regex có thể đáp ứng tất cả ba điều kiện của tôi cho mã zip. Ví dụ-
- 12345
- 12345-6789
- 12345 1234
Bất kỳ gợi ý và đề xuất sẽ được đánh giá cao. Cảm ơn !
Có thể trùng lặp:
Mã bưu chính cuối cùng và zip regex là gì?
Tôi cần Regex có thể đáp ứng tất cả ba điều kiện của tôi cho mã zip. Ví dụ-
Bất kỳ gợi ý và đề xuất sẽ được đánh giá cao. Cảm ơn !
Câu trả lời:
^\d{5}(?:[-\s]\d{4})?$
^
= Bắt đầu của chuỗi.\d{5}
= Ghép 5 chữ số (cho điều kiện 1, 2, 3)(?:…)
= Phân nhóm[-\s]
= Khớp một khoảng trắng (cho điều kiện 3) hoặc một dấu gạch nối (cho điều kiện 2)\d{4}
= Khớp 4 chữ số (cho điều kiện 2, 3)…?
= Mẫu trước nó là tùy chọn (đối với điều kiện 1)$
= Kết thúc chuỗi.\s
sẽ khớp với bất kỳ khoảng trắng nào, bao gồm các tab và các dòng mới.
00544
là một mã zip hợp lệ; 544
không phải.
/(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Chỉ đối với ba điều kiện được liệt kê, các biểu thức này cũng có thể hoạt động:
^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$
Nếu chúng ta có khoảng trắng bổ sung không mong muốn trong khoảng từ 5 đến 4 chữ số hoặc một mã zip 9 chữ số liên tục, chẳng hạn như:
123451234
12345 1234
12345 1234
Ví dụ, biểu thức này sẽ là một tùy chọn phụ với ít ràng buộc hơn:
^\d{5}([-]|\s*)?(\d{4})?$
jex.im trực quan hóa các biểu thức chính quy:
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}`);
});
}
Tôi biết điều này có thể hiển nhiên đối với hầu hết những người sử dụng RegEx thường xuyên, nhưng trong trường hợp bất kỳ độc giả nào chưa quen với RegEx, tôi nghĩ tôi nên chỉ ra một quan sát mà tôi đã thực hiện có ích cho một trong những dự án của tôi.
Trong một câu trả lời trước từ @kennytm:
^\d{5}(?:[-\s]\d{4})?$
…? = Mẫu trước nó là tùy chọn (đối với điều kiện 1)
Nếu bạn muốn cho phép cả mã zip 5 chữ số và +4 tiêu chuẩn, đây là một ví dụ tuyệt vời.
Để chỉ khớp mã zip ở định dạng 'Zip + 4' của Hoa Kỳ khi tôi cần làm (chỉ điều kiện 2 và 3), chỉ cần xóa mã cuối cùng ?
để nó luôn khớp với nhóm 5 ký tự cuối cùng.
Một công cụ hữu ích mà tôi khuyên dùng để mày mò với RegEx được liên kết bên dưới:
Tôi sử dụng công cụ này thường xuyên khi tôi thấy RegEx hoạt động tương tự như những gì tôi cần, nhưng có thể được điều chỉnh tốt hơn một chút. Nó cũng có một menu tham chiếu RegEx tiện lợi và giao diện thông tin giúp bạn biết các thay đổi của bạn ảnh hưởng như thế nào đến các kết quả phù hợp với văn bản mẫu bạn đã nhập.
Nếu tôi có gì sai hoặc bỏ sót một thông tin quan trọng, vui lòng sửa cho tôi.
\d{5}([ \-]\d{4})?
.