regex - 테스트 - 정규표현식 특수문자




E.164 형식의 전화 번호와 일치하는 정규 표현식 (5)

가능한 모든 유효한 E.164 형식의 전화 번호와 일치하는 정규 표현식을 추가해야합니다.

이 정규식은 북미 전화 번호에 대해서는 잘 작동하지만 국제 번호에도 사용할 수있는 무언가가 필요합니다.

^ (+ 1 | 1)? ([2-9] \ d \ d [2-9] \ d {6}) $

예 : +1 또는 1은 선택 사항이므로 +13172222222는 여전히 일치합니다. +1 또는 1은 선택 사항이므로 3172222222는 여전히 일치합니다. 3171222222가 일치하지 않으며 유효한 NANPA 번호가 아닙니다.

출처 : Freeswitch.org

나는 또한 이와 관련된 질문 을 보았지만 그것이 나의 필요에 너무 미친 듯하다. 필자의 경우 블랙리스트에 대한 엔트리를 검증하는 중이며 Twilio 데이터와 비교할 것입니다. 그래서 저는 국가 코드가 유효한 날씨에 대해별로 신경 쓰지 않습니다. 숫자가 일반 E.164 양식과 일치하는지 테스트하는 것이 필요합니다. NANPA라고 가정하기보다는 테스트해야합니다.

필자가 필적 할만한 것을 더 잘 이해하기 위해 Twilio 문서 의 예가 있습니다.

가능한 경우 Twilio의 요청에있는 모든 전화 번호는 E.164 형식입니다. 예를 들어 (415) 555-4345는 '+14155554345'로 표시됩니다. 그러나 Twilio가 들어오는 발신자 번호를 E.164로 정규화 할 수없는 경우가 있습니다. 이러한 상황에서 Twilio는 원시 발신자 ID 문자열을보고합니다.

+14155554345와 일치하지만 (415) 555-4345, 415555434, 555-4345 또는 5554345는 일치하지 않습니다. 정규식은 미국 국가 코드와 일치하는 것으로 만 제한하면 안됩니다. 기본적으로 + xxxxxxxxxxx 형식과 일치해야합니다. 또한 영국과 같이 여러 자리 국가 코드가 있으므로 숫자가 더 길 수 있다고 생각합니다. T-Mobile의 영국 번호는 +447953966150입니다. 더 좋은 예를 생각해 볼 수 있다면이 내용을 업데이트하겠습니다.


E.164 번호가 최대 15 자리수를 가질 수 있다는 것을 제외하고는 허용되는 대답이 좋습니다. 사양은 최소값을 나타내지 않으므로 반드시 10을 계산하지는 않습니다.

^\+?[1-9]\d{1,14}$ 이어야합니다.

E.164 참조하십시오 E.164


글쎄, 나는 대답을 사용했지만 많은 경우 실패했다.

다음과 같은 입력의 경우 :

  • 여기서 숫자는 "+"로 시작하지 않았습니다.
  • 숫자가 9보다 적 으면.

정규식이 실패했습니다.

나는 마침내 사용했다.

^\+(?:[0-9]?){6,14}[0-9]$

이것은 매력처럼 일했습니다!


전화 번호와 더하기 기호 사용 만 일치하도록 허용 된 대답 수정

^ ++? [1-9] \ d {1,14} $

전화 번호에 +1234567890과 같은 더하기 기호가 있는지 확인합니다.


제 생각에는 훌륭한 예제가있을 때까지는 유연한 정규 표현식이 가장 적합합니다. 이것은 + 와 10-14 자리가 일치합니다.

^\+?\d{10,14}$

이 표현은 다음을 의미합니다. ^ 문자열의 매치를 시작합니다. \+? 선택적으로 + 기호를 찾습니다. \d{10,14} 10 자리에서 14 자리 사이가 일치합니다. $ 우리가 문자열의 끝에 있는지 확인하십시오.

특정 색인의 숫자가 1 또는 0이 아니어야 함을 알게되면 다음과 같이 해당 위치에서 [2-9] 를 사용할 수 있습니다.

^\+?\d{6,7}[2-9]\d{3}$

[2-9] 는 2에서 9 사이의 임의의 숫자와 일치 함을 의미합니다 (0 또는 1과 일치하지 않음).


허용 된 대답은 '+'기호가없는 숫자에서는 작동하지 않습니다. 위키피디아 측정법에 따라 약간의 수학 계산을했습니다. 국가 코드 : 1 ~ 3 자리 숫자,
최대 : 15, 실제 전화 번호 : 12 (15-3시) ~ 14 (15-1) 자

이와 관련하여 최소값은 10입니다. 예를 들어, 더미 미국 번호 "+14155552671"은 최소값입니다. 그것을 분해하면 +1은 미국 국가 코드이며 나머지는 모두 '지역 번호'+ '구독자 번호'인데 10이됩니다. 연구에서 7 자리 (스웨덴) 미만의 숫자를 찾을 수 없습니다. 유효합니다.

그래서 내가 10 ~ 15 사이에있는 숫자와 함께 '+'기호와 함께 작동해야하는 정규식은 다음과 같습니다.

^ \ ++? [0-9] \ d {6,14} $

그리고 이것은 잘 작동합니다. 당신은 Regex101 그것을 확인할 수 있습니다.





regex