我很难找到一个模式,将检测以下
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
希望能有所帮助。