전역 플래그와 test()
아래와 같이 휴대폰 번호가 맞는지 틀린지 판별하는 함수를 사용했다.
function isPhone(phone: number):boolean {
const reg = /^01(?:0|1|[6-9])(\d{3}|\d{4})(\d{4})$/g;
return reg.test(phone)
}
console.log(isPhone('01012341234')); // true
console.log(isPhone('01012341234')); // false ?
정규식에 일치하는 값을 여러번 넣었음에도 true, false가 계속 찍혀서 무슨 문제가 싶어서 mdn에 있는 RegExp.test()
를 좀 더 주의깊게 읽어보았다.
MDN 사이트
위 링크로 들어가서 살펴보면 전역 플래그와 test() 라고 쓰여진 곳을 발견했다.
정규 표현식에 전역 플래그를 설정한 경우, 정규 표현식의 lastIndex를 업데이트 한다고 한다.
처음 실행하면, 01012345678
에서 탐색을 다하면 숫자 8의 자리인 lastIndex는 10이다. true
를 반환하고 lastIndex는 초기화가 되지 않는다.
다시 실행하면, lastIndex는 10을 가지고 있으므로, 그 이후로 탐색을 시작하는데 탐색되는게 없으므로 false
를 반환한다. lastIndex는 0으로 초기화 된다. RegExp.exec()
도 이와 같다.
이를 해결하기 위해서는 전역 플래그를 사용하지 않거나, String.match()
를 사용해서 해결하면 된다.
Author And Source
이 문제에 관하여(전역 플래그와 test()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@heumheum2/전역-플래그와-test저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)