2014-09-26 6 views
0

현재 PHP로 사용자가 SMS 메시징을 통해 상호 작용할 수있는 웹 사이트를 구축 중입니다. 따라서 데이터베이스에 전화 번호를 저장해야합니다. 현재 미국에서 SMS 상호 작용 만 허용 중이므로 제출 된 전화 번호가 미국 형식을 준수하는지 확인해야합니다. 일반적으로 이것은 다음과 같은 몇 가지 사항을 의미합니다. 1은 첫 번째 숫자 여야하고, 지역 번호는 0 또는 1으로 시작해야하며 앞에는 1이없는 문자열은 10 자리 (3 자리 지역 번호와 7 자리 숫자) 여야합니다.미국 전화 번호 확인

이러한 모든 요구 사항에도 불구하고 사용자가 오류없이 원하는 형식으로 전화 번호를 자유롭게 입력 할 수 있기를 바랍니다.

답변

2

첫 번째 단계는 비 숫자를 무시하는 것입니다. 1 위는 모든 전화 회사, 특히 뉴저지 근처에서는 필요하지 않습니다. 전화를 걸면 오류 또는 잘못된 번호가 표시됩니다.

지역 번호는 [2-9] 11이나 [2-9] 9 [0-9]가 될 수 없습니다. 가운데 자릿수로 9를 가진 지역 코드는 지역 코드 고갈 문제를 해결하기 위해 아직 결정되지 않은 계획을 위해 예약되어 있습니다.

교류는 0 또는 1로 시작할 수 없으며 [2-9] 11이 될 수도 없습니다.


이러한 제한이 코드로 표현된다

$mobile = preg_replace ('/\D/', '', $trimmed['mobile']); 

if ($mobile[0] == '1') $mobile = substr ($mobile, 1); // remove prefix 

$invalid = strlen ($mobile) != 10 || 
      preg_match ('/^1/',  $mobile) || // ac start with 1 
      preg_match ('/^.11/', $mobile) || // telco services 
      preg_match ('/^...1/', $mobile) || // exchange start with 1 
      preg_match ('/^....11/', $mobile) || // exchange services 
      preg_match ('/^.9/',  $mobile); // ac center digit 9 
+0

은 유효한 포인트입니다. 나는'[x] 11' 지역 코드를 배제하기 위해 효율적인 문장을 작성하는 정규 표현식으로는 충분하지가 않다. 그렇게 할 수 있다면 기꺼이 대답 해 줄 것입니다. – David

+0

@David : 코드를 추가했지만 유효하지 않은 숫자를 나타냅니다. 무효로 표시되지 않은 모든 것은 유효해야합니다. – wallyk

+0

나는 preg_match와 OR 문을 여러 개 사용하는 사람을 본 적이 없다. 이것은 어떻게 하나의 정규식보다 더 효율적입니까? – David

0

검색 및 수색에서 내가 할 수있는 것을 배운 후 미국에서만 사용할 수있는 방법을 찾을 수 없었습니다. 그래서, 내가 고안 한 것은 다음과 같습니다.

먼저 모든 입력 형식을 허용하려면 preg_replace을 사용하여 모든 비 숫자 문자를 제거하십시오. [사용자는 어떤 하이픈을 사용하거나 원하는 슬래시,하지만 그들은 나에게 아무 소용이있다 할 수 있습니다.]

$mobile = preg_replace('/\D/', '', $trimmed['mobile']); 

을 숫자의 단지 순수한 캐릭터와 함께 작동하도록, 선행 1의 제거 -이 어떤 처리한다 사용자가 선행 1을 포함하는 경우 또는 1으로 지역 번호를 시작한 경우 [유효한 경우이 항상 10 자리 문자열로 날을 떠나야한다.]

$mobiletrim = ltrim($mobile, '1'); 

다음, 트리밍 전화 번호가 정확하게 10 자리하고 중 하나 0 또는 1로 시작하지 않는 정규식 확인합니다.

if (preg_match ('/^[2-9]\d{9}$/', $mobiletrim) || empty($trimmed['mobile'])) { 
     $mp = TRUE; 
     if (!empty($trimmed['mobile'])) { $mobiletrim = "1" . $mobiletrim; } 
    } else { 
     $profile_errors[] = "Please enter a valid U.S. phone number."; 
    } 
if ($mp) { //Store Phone Number in db } 

위에서 볼 수있는 마지막 단계는, DB에 유효한 수를 저장하기 전에 최고의 1을 추가했다 사용자들이 경우에 할 것이다, 빈 전화 필드를 제출하지 않은 것을 제공 그들이 그들의 수를 저장하고 싶지 않았다.


기술적으로 모든 NANP 번호의 유효성을 검사합니다. NANP에서 미국까지만 범위를 좁히는 유일한 방법은 현재 미국 지역 코드 목록을 분석하여 미국 지역 코드가 사용되었는지 확인하는 것입니다.

+2

@Sammitch을, 당신이 물어 질문 양식에 갈 때, 당신은 같은 시간에 그것을 응답의 옵션이 있습니다. StackExchange 사이트의 기능으로 사람들이 자신의 지식을 공유하고자 할 때 사용되지만 맞는 질문은 존재하지 않습니다. StackExchange 정책 및 디자인에 따라 지식을 공유했기 때문에 다운 투표가 필요하지 않습니다. – David