简单修复电话号码的正则表达式验证

时间:2012-08-23 23:47:25

标签: php regex

到目前为止我用这个用于验证我的表格中的电话号码:

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

它适用于那些数字:+021 (+12) 113-2145但我需要在它的末尾添加一个扩展名:+021 (+12) 113-2145 x 123所以如何添加char x之后数字?

x和数字之间的空格也应该是可选的,就像我上面的代码一样。

任何想法?谢谢!

2 个答案:

答案 0 :(得分:2)

首先,您可以使用较短的[0-9]替换\d的所有实例。 (对于十进制数字)

然后,将其添加到原始正则表达式:

(x\s*[\d]{3})?

所以它会是

/^\s*\+?\s*([\d]+\s*)+\s*(\((\+?[\d]+\s*)+\))?\s*[\d-\s]*[\d]\s*(x\s*[\d]{3})?$/

修改:将扩展程序设为可选

修改2 :使用\d代替[0-9]

答案 1 :(得分:1)

尝试:

/^\s*\+?\s*([0-9]+\s*)+\s*(\((\+?[0-9]+\s*)+\))?\s*[0-9-\s]*[0-9]\s*(x\s*[0-9]+)?$/;

补充:(x \ s * [0-9] +)?; 编辑:

$pattern = '/^\s*\+?\s*([0-9]+\s*)+\s*(\((\+?[0-9]+\s*)+\))?\s*[0-9-\s]*[0-9]\s*(x\s*[0-9]+)?$/';
$subject = '+021 (+12) 113-2145 x 123';
if(preg_match($pattern, $subject))
    echo 'matched';