2013-12-09 77 views
0

如果號碼與連字符,加號,空格或括號中的任何數字不匹配,我想顯示一條錯誤消息。沒有數字。電話號碼的preg_match表達式

例如:

(012) 123 4567 
(012)-123-4567 
012-345-6789 
123 123 1234 
+12 23 213 3456 

以上的例子與此表達的所有工作:

if (!preg_match("/^[0-9\-]|[\+0-9]|[0-9\s]|[0-9()]*$/", $_POST['tel'])) { 
    $telErr = "Invalid contact number"; 
} 

但它允許字母,這是我不想要的。

實施例:

+00000000a 

上面的例子是由我有表達接受。

請有人可以幫助我這個。

回答

0

更好的正則表達式是:

"/^[\+0-9\-\(\)\s]*$/" 
+0

這也將匹配++++++++ 234 + - – avonnadozie

1

這expression'll接受+ 5number,5number

"'^(([\+]([\d]{2,}))([0-9\.\-\/\s]{5,})|([0-9\.\-\/\s]{5,}))*$'" 
0

我第一清理串中的位(即避免了無用的匹配):

$input = preg_replace('/[^0-9+\(\)-]/', '', $_POST['tel']); 

我比賽的美國號碼+1(xxx)xxx-xxxx;

if(preg_match('/^(\+1|001)?\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([ .-]?)([0-9]{4})/',$input)) 
     $result = "match: USA"; 

else $result = "no match"; 

這使得相當長的一段輸入配置 - 只有你的最後一個號碼將不匹配(如果我沒有做清理第一,不是因爲這是符合國際代碼,但由於在分割的地區代碼)所有其他人也沒有清理。