검색 및 수색에서 내가 할 수있는 것을 배운 후 미국에서만 사용할 수있는 방법을 찾을 수 없었습니다. 그래서, 내가 고안 한 것은 다음과 같습니다.
먼저 모든 입력 형식을 허용하려면 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에서 미국까지만 범위를 좁히는 유일한 방법은 현재 미국 지역 코드 목록을 분석하여 미국 지역 코드가 사용되었는지 확인하는 것입니다.
은 유효한 포인트입니다. 나는'[x] 11' 지역 코드를 배제하기 위해 효율적인 문장을 작성하는 정규 표현식으로는 충분하지가 않다. 그렇게 할 수 있다면 기꺼이 대답 해 줄 것입니다. – David
@David : 코드를 추가했지만 유효하지 않은 숫자를 나타냅니다. 무효로 표시되지 않은 모든 것은 유효해야합니다. – wallyk
나는 preg_match와 OR 문을 여러 개 사용하는 사람을 본 적이 없다. 이것은 어떻게 하나의 정규식보다 더 효율적입니까? – David