2010-11-06 170 views
1

我正在開發一項功能來驗證用戶提交的美國電話號碼,該號碼可以用人們通常使用的任何常用數字格式提交。到目前爲止我的代碼如下:正在驗證美國電話號碼w /地區代碼

$number = '123-456-7890'; 

function validate_telephone_number($number) { 
    $formats = array(
     '###-###-####', 
     '(###)###-###', 
     '(###) ###-###', 
     '##########' 
    ); 

    $number = trim(preg_replace('[0-9]', '#', $number)); 

    if (in_array($number, $formats)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

首先,這段代碼似乎並不奏效,並返回上所有提交的數字錯誤。我似乎無法找到我的錯誤。其次,我正在尋找一種簡單的方法,只允許來自特定允許區號的數組中的電話號碼。有任何想法嗎?

回答

1

關於第一個問題:

preg_replace('/[0-9]/', '#', $number) 

'/\d/'


對於第二個問題,這可能會幫助您:

$areaCode = substr(preg_replace('/[^\d]/', '', $number),0 , 3); 

這將使你在第3位丟棄所有其他字符的數字。

我不熟悉美國的區號格式,所以我無法幫助您更多地瞭解這一點。


獎勵:

if (in_array($number, $formats)) { 
    return true; 
} else { 
    return false; 
} 

相當於

return in_array($number, $formats); 

作爲事實上的形式

if(<expression>){ 
    return true; 
} 
else{ 
    return false; 
} 

的任何語句可以寫爲return (bool) <expr>;,但在這種情況下,in_array將始終返回布爾值,因此不需要(bool)

+0

真棒。完美運作。謝謝! – thenameisnick 2010-11-06 17:34:49

+0

這兩部分工作很好!感謝您的提示。 – thenameisnick 2010-11-06 17:48:27

0

您的代碼不檢查格式正確但無效的數字 - 例如,在美國沒有區號以0或1開頭,因此可以檢查。另外,您的格式不允許包含國家代碼 - 例如,+15551234567將被拒絕。

如果你不關心格式,只是想驗證如果輸入量有效的美國電話號碼的數字,你可以使用這樣的事情:

$clean_number = preg_replace("/[^0-9]/", '', $number); 
$valid = preg_match("/^(\+?1)?[2-9][0-9]{9}$/", $clean_number); 

當然,這也會接受「foo 5555555555 bar」作爲有效數字 - 如果您不希望這樣做,請使preg_replace更具限制性(例如僅刪除括號,空格和破折號)。

0

如果你喜歡做,而無需保持大量的代碼,你的看看這個API是驗證一個美國號碼,並提供了多種格式的數字https://www.mashape.com/parsify/format

+0

鏈接中斷,請你更新鏈接 – 2017-11-11 07:58:09