2013-12-09 56 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"; 

这使得相当长的一段输入配置 - 只有你的最后一个号码将不匹配(如果我没有做清理第一,不是因为这是符合国际代码,但由于在分割的地区代码)所有其他人也没有清理。