2012-06-21 214 views
-1

可能重複:
A comprehensive regex for phone number validation驗證電話號碼

請我創造了這個功能對郵件和電話號碼驗證,郵寄自己的作品,BT手機自己做NT工作。

if(trim($_POST['email']) == '') { 
    $hasError = true; 
} else if (!eregi("^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$",  
     trim($_POST['email']))) { 
    $hasError = true; 
} else { 
    $email = trim($_POST['email']); 
} 

if(trim($_POST['phonenumber']) == '') { 
    $hasError = true; 
} else if (!eregi("/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/$",  
      trim($_POST['phonenumber']))) { 
    $hasError = true; 
} else { 
    $phonenumber= trim($_POST['phonenumber']); 
} 
+0

它是尾隨'$/$'?嘗試改變它只是'$',看看是否有效.... – andrewsi

+0

'ereg'函數已被棄用。見['preg'](http://il.php.net/manual/en/book.pcre.php)。另外,請明確定義有效的電話號碼是什麼。 –

回答

0

首先,你應該使用preg_match代替eregi

除此之外,人們以各種方式輸入電話號碼。處理它們的最簡單方法是去掉任何不是一個數字,看看你是否有十位:

$number = preg_replace("/\D/","",$_POST['phonenumber']); 
if(strlen($number) == 10) { /* ok */ } 
else { /* error */ } 
+0

'+972 52 1234567'是一個有效的電話號碼。 –

+0

的確如此,但我認爲這個問題只接受美國的電話號碼,因爲沒有任何處理國家代碼的嘗試。 –

+0

我確實希望它接受所有數字 –

0

我認爲更好的方式來做到這一點。將去除所有非數字字符從輸入並檢查長度是否在一定範圍內。特別是如果您將這些數據存儲在數據庫中,那麼最終不會存儲不必要的數據。

如果您想允許擴展名,您可能想要將x字符留在中。這是一個刪除字符串中所有非數字字符的功能(x除外)。

function removeNonNumeric($string) { 
    return preg_replace('/[^\dx]/', '', $string) 
} 

當您需要輸出結果時,您可以根據需要進行格式化。