중복 가능성 :
최종 우편 번호와 zip regex는 무엇입니까?
우편 번호에 대한 세 가지 조건을 모두 충족시킬 수있는 Regex가 필요합니다. 예-
- 12345
- 12345-6789
- 12345 1234
모든 조언과 제안을 많이 주시면 감사하겠습니다. 감사 !
답변
^\d{5}(?:[-\s]\d{4})?$
^
= 문자열의 시작.\d{5}
= 5 자리 일치 (조건 1, 2, 3의 경우)(?:…)
= 그룹화[-\s]
= 공백 (조건 3의 경우) 또는 하이픈 (조건 2의 경우) 일치\d{4}
= 4 자리 일치 (조건 2, 3의 경우)…?
= 선택 사항 앞의 패턴 (조건 1의 경우)$
= 문자열의 끝.
답변
나열된 세 가지 조건에 대해서만 다음식이 작동 할 수 있습니다.
^\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})?$
추가 설명은이 데모를 참조하십시오.
RegEx 회로
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 우편 번호를 모두 허용하려는 경우 이것이 좋은 예입니다.
필요한대로 US ‘Zip + 4’형식의 우편 번호 만 일치 시키려면 (조건 2 및 3 만 해당) ?
마지막 5 개 문자 그룹과 일치하도록 마지막을 제거하기 만하면 됩니다.
RegEx를 수정하는 데 권장하는 유용한 도구는 다음과 같습니다.
필자는 필요한 것과 비슷한 일을하지만 좀 더 잘 맞출 수있는 RegEx를 찾을 때이 도구를 자주 사용합니다. 또한 멋진 RegEx 참조 메뉴와 변경 사항이 입력 한 샘플 텍스트의 일치 항목에 어떤 영향을 미치는지 알 수있는 유익한 인터페이스가 있습니다.
잘못된 것이 있거나 중요한 정보를 놓친 경우 수정 해주십시오.