정규표현식

문제 상황 ❗️

아이디 찾기, 비밀번호 찾기, 회원가입 등 이름을 입력하는 필드에 한글, 숫자만 허용되도록 하는 것이 의도였음

하지만 의도치 않게 | (pipe symbol)도 허용됨​


  • 기존 정규식

    1
    /^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣|0-9]{1,20}$/
  • 기존 정규식을 도식화한 것

  • | 를 허용하는 것 같이 보였음


  • 처음에는 | (pipe symbol)이 특수문자로 인식이 되지 않는 문제인 줄 알았다.

    1
    /^(?!"|")([ㄱ-ㅎㅏ-ㅣ가-힣0-9]){1,20}$/
    • negative lookahead 를 사용해서 강제로 | (pipe symbol)을 제외하는 조건을 넣음
    • negative lookahead : 특정 조건을 만족하는 문자열을 찾되, 그중에서 제외를 하고싶은 경우 사용

  • 하지만 OR로 사용되는 줄 알았던 | (pipe symbol)을 제거하기만 해도 문제를 해결할 수 있었음

    1
    /[ㄱ-ㅎㅏ-ㅣ가-힣0-9]{1,20}$/
    • 새로운 정규식을 도식화한 것


정규표현식 Tip 💁🏻‍

  • [ ] 에서 | 는 OR가 아닌 하나의 문자로 인식
  • ( ) 에서만 |는 OR의 의미를 가진다.
  • https://regexper.com/ (정규표현식을 도식화해주는 사이트)