[javascript] 자바 스크립트로 전화 번호 확인

일부 웹 사이트 에서이 코드를 찾았으며 완벽하게 작동합니다. 전화 번호가
(123) 456-7890 또는 123-456-7890 형식 중 하나인지 확인합니다.

문제는 내 클라이언트 (어쩌면 클라이언트 물건 일지 모르겠다)가 10 개의 숫자를 연속적으로 다른 형식으로 추가하려고한다는 것입니다. 1234567890 .

이 정규식을 사용하고 있습니다.

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

다른 형식의 유효성 검사를 추가하려면 어떻게해야합니까? 정규식이 좋지 않습니다.



답변

먼저, 형식 검사기는 NANP (국가 코드 +1) 숫자 에만 적합 합니다. 북미 이외의 지역에서 전화 번호를 가진 사람이 애플리케이션을 사용합니까? 그렇다면 그러한 사람들이 완벽하게 유효한 [국제] 번호를 입력하지 못하게하고 싶지 않습니다.

둘째, 유효성 검사가 잘못되었습니다. NANP 번호의 형식은 취 숫자 2-9이며, 숫자 0-9입니다. 또한, 지역 번호 및 교환 형태를 취할 수 없습니다 특별한 서비스와 혼동을 피하기 위해 (두 사람과 말) 을 제외하고 비 지리적 지역 코드 번호 (800, 888, 877, 866, 855, 900)이있을 수 있습니다NXX NXX XXXXNXN11N11 교환 .

따라서 정규 전화 번호는 유효한 전화 번호가 아니지만 번호 (123) 123 4566을 전달합니다. 로 교체 \d{3}하여 문제를 해결할 수 있습니다 [2-9]{1}\d{2}.

마지막으로 웹 브라우저에서 사용자 입력을 확인하고 있다는 느낌이 들었습니다. 클라이언트 측 유효성 검사는 사용자에게 제공 하는 편의 일뿐입니다 . 여전히 서버의 모든 입력을 다시 검증해야합니다.

TL; DR 은 정규 표현식을 사용하여 전화 번호URL 과 같은 복잡한 실제 데이터의 유효성검사 하지 않습니다 . 전문 라이브러리를 사용하십시오 .


답변

내가 선택한 정규식은 다음과 같습니다.

/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im

유효한 형식 :

(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725


답변

10 자리에서 10 자리 만 찾으려면 숫자를 제외한 모든 것을 무시하십시오.

   return value.match(/\d/g).length===10;


답변

내가 할 일은 형식을 무시하고 숫자 내용을 확인하는 것입니다.

var originalPhoneNumber = "415-555-1212";

function isValid(p) {
  var phoneRe = /^[2-9]\d{2}[2-9]\d{2}\d{4}$/;
  var digits = p.replace(/\D/g, "");
  return phoneRe.test(digits);
}


답변

/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g

(123) 456-7890
+ (123) 456-7890
+ (123) -456-7890
+ (123)-456-7890
+ (123)-456-78-90
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725

이것은 매우 느슨한 옵션 이며이 방법을 선호합니다. 주로 사용자가 전화 번호를 추가 해야하는 등록 양식으로 사용합니다. 일반적으로 사용자는 엄격한 서식 규칙을 적용하는 양식에 문제가 있으므로 숫자와 형식을 표시하거나 데이터베이스에 저장하기 전에 사용자가 선호합니다.
http://regexr.com/3c53v


답변

다음 REGEX는 이러한 형식 중 하나를 확인합니다.

(123) 456-7890
123-456-7890
123.456.7890
1234567890

/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/


답변

더 명확한 것을 사용하는 것이 좋습니다 (특히 누가 코드를 유지해야 할지를 생각하십시오) … 어떻게 :

var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
               formats
                 .replace(/([\(\)])/g, "\\$1")
                 .replace(/9/g,"\\d") +
               ")$");

정규 표현식이 명확한 템플릿으로 작성된 곳은 어디입니까? 새로운 것을 추가하는 것은 쉬운 일이 아니며 고객 자신도 “옵션”페이지에서 그렇게 할 수 있습니다.