[regex] 우편 번호에 대한 정규식

중복 가능성 :
최종 우편 번호와 zip regex는 무엇입니까?

우편 번호에 대한 세 가지 조건을 모두 충족시킬 수있는 Regex가 필요합니다. 예-

  1. 12345
  2. 12345-6789
  3. 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를 수정하는 데 권장하는 유용한 도구는 다음과 같습니다.

https://regexr.com/

필자는 필요한 것과 비슷한 일을하지만 좀 더 잘 맞출 수있는 RegEx를 찾을 때이 도구를 자주 사용합니다. 또한 멋진 RegEx 참조 메뉴와 변경 사항이 입력 한 샘플 텍스트의 일치 항목에 어떤 영향을 미치는지 알 수있는 유익한 인터페이스가 있습니다.

잘못된 것이 있거나 중요한 정보를 놓친 경우 수정 해주십시오.


답변