我正在尋找一些方法來驗證PHP中的電話號碼,這些電話號碼可以以任何存在的各種格式輸入。如果有幫助,我可以將問題的域名限制爲美國的電話號碼(或國際號碼 - 一個或另一個,但不能同時爲兩個)。PHP:電話號碼解析
我試過尋找自定義過濾器filter_var()
,相當於strtotime()
的電話號碼,或只是普通的香草解析庫,但沒有多少運氣。
如果需要,我可以設計定製的解決方案,但我不希望如果已經存在,是因爲A)我的肯定不會是那樣強勁,和B)我不喜歡重新發明輪子。
我正在尋找一些方法來驗證PHP中的電話號碼,這些電話號碼可以以任何存在的各種格式輸入。如果有幫助,我可以將問題的域名限制爲美國的電話號碼(或國際號碼 - 一個或另一個,但不能同時爲兩個)。PHP:電話號碼解析
我試過尋找自定義過濾器filter_var()
,相當於strtotime()
的電話號碼,或只是普通的香草解析庫,但沒有多少運氣。
如果需要,我可以設計定製的解決方案,但我不希望如果已經存在,是因爲A)我的肯定不會是那樣強勁,和B)我不喜歡重新發明輪子。
使用正則表達式,以下內容將匹配3334445555,333.444.5555,333-444-5555,3334444555,(333)4445555及其所有組合。 然後替換所有那些(333)444-5555
preg_replace('\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})', '(\1) \2-\3', $text);
我還應該指出,如果您不確定數字是否有效並且想返回錯誤(如果上述返回false),則可以將上述內容放在if語句中。 – Exupery
「解析」的電話號碼是不是一個原生PHP的事情。
您需要指定自己什麼是'有效'的電話號碼簿 - 這應該通過驗證對指定格式或正則表達式的輸入來完成。
PHP無法知道'有效數字'是什麼。
關於日期/時間也可以這麼說,但儘管在國內和國際上有不同的可能格式的數量可笑,但是「strtotime()」和等價物本身就存在。它使用「最佳猜測」解析算法,這就是我正在尋找的一切。 – FtDRbwLXw6
@drrcknlsn我不同意; [文檔](http://php.net/manual/en/datetime.formats.php)清楚地說明了'strtotime()'認爲有效和可分析的輸入。 – Repox
如果PHP能夠根據一組明確定義的規則知道有效的日期/時間是什麼,那麼絕對沒有理由不知道什麼是有效的電話號碼。事實上,它本身不可能是因爲沒有人花時間去實現它。不是因爲它無法完成。這就是我所說的。 – FtDRbwLXw6
我不知道所有美國的電話號碼格式,但我猜這是你可以擴展一個總體思路:
function validate_phone($phone) {
// replace everything except numbers
$phone = preg_replace('~[^\dx]~', '', $phone);
return preg_match('~^\d{11}(x\d{4})?$~', $phone);
}
// $phone = 12345678901;
$phone = '1-234-567-8901x1234';
$valid = filter_var($phone, FILTER_CALLBACK, array(
'options' => 'validate_phone'
));
if ($valid) {
echo "It's valid!";
};
此代碼支持或十位數字(破折號,空格,內部點)和擴展格式與x2134後綴。
使用正則表達式 – Quantastical