北美电话号码的正则表达式验证


Regex validation for North American phone numbers

我很难找到一个模式,将检测以下

909-999-9999

909 999 9999

(909) 999 - 9999

(909) 999 9999

999 999 9999

9999999999

'A[(]?[0-9]{3}[)]?[ ,-][0-9]{3}[ ,-][0-9]{3}'z

我试过了,但它并不适用于所有实例。我在想我可以把每个字符放入一个数组,然后检查它。但这样代码就太长了。

最后一组有4个数字,您在正则表达式中指定了3。

您还需要对分隔符应用?量词(出现1或0),因为它们是可选的。

使用

^[(]?[0-9]{3}[)]?[ ,-]?[0-9]{3}[ ,-]?[0-9]{4}$

看这里的演示

PHP演示:

$re = "/'A[(]?[0-9]{3}[)]?[ ,-]?[0-9]{3}[ ,-]?[0-9]{4}'z/"; 
$strs = array("909-999-9999", "909 999 9999", "(909) 999-9999", "(909) 999 9999", "999 999 9999","9999999999"); 
$vals = preg_grep($re, $strs);
print_r($vals);

和另一个:

$re = "/'A[(]?[0-9]{3}[)]?[ ,-]?[0-9]{3}[ ,-]?[0-9]{4}'z/"; 
$str = "909-999-9999";
if (preg_match($re, $str, $m)) {
    echo "MATCHED!";
}

顺便说一句,可选的?子模式比替代模式性能更好。

试试这个regex:

^(?:'('d{3}')|'d{3})[- ]?'d{3}[- ]?'d{4}$
解释:

^                 # from start
(?:               # one of
    '('d{3}')     # '(999)' sequence
        |         # OR
    'd{3}         # '999' sequence
)                 #
[- ]?             # may exist space or hyphen
'd{3}             # three digits
[- ]?             # may exist space or hyphen
'd{4}             # four digits
$                 # end of string

希望能有所帮助。