3.정규표현식
정규표현식
문제 상황 ❗️
아이디 찾기, 비밀번호 찾기, 회원가입 등 이름을 입력하는 필드에 한글, 숫자만 허용되도록 하는 것이 의도였음
하지만 의도치 않게
|
(pipe symbol)도 허용됨
기존 정규식
1
/^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣|0-9]{1,20}$/
|
를 허용하는 것 같이 보였음
처음에는
|
(pipe symbol)이 특수문자로 인식이 되지 않는 문제인 줄 알았다.1
/^(?!"|")([ㄱ-ㅎㅏ-ㅣ가-힣0-9]){1,20}$/
- negative lookahead 를 사용해서 강제로
|
(pipe symbol)을 제외하는 조건을 넣음 - negative lookahead : 특정 조건을 만족하는 문자열을 찾되, 그중에서 제외를 하고싶은 경우 사용
- negative lookahead 를 사용해서 강제로
하지만 OR로 사용되는 줄 알았던
|
(pipe symbol)을 제거하기만 해도 문제를 해결할 수 있었음1
/[ㄱ-ㅎㅏ-ㅣ가-힣0-9]{1,20}$/
정규표현식 Tip 💁🏻
[ ]
에서|
는 OR가 아닌 하나의 문자로 인식( )
에서만|
는 OR의 의미를 가진다.- https://regexper.com/ (정규표현식을 도식화해주는 사이트)