我有正则表达式匹配美国数字:
\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}
虽然我检查前三位数字作为我们的数字,但我只有很少的区号,并且只想用这个区号来过滤麻木。
$area_code = array(201,202,203,2,04);
只允许此数组值中包含前三位数的数字。正则表达式需要修改什么?
答案 0 :(得分:1)
以下正则表达式应符合您的目的:
\(?20[1-4]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}
答案 1 :(得分:1)
使用implode()
将这些数字与分隔符|
结合在一起,并以正则表达式模式使用它:
$area_code = array(201,202,203,204);
$p = implode('|', $area_code);
$pattern = '/\(?(?:'.$p.')\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/';
由此产生的正则表达式如下:
\(?(?:201|202|203|2|4)\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}
如果它们以$area_code
数组中的某个值开头,那么该数字会匹配。这种方法优于另一种方法的优点是,这可以让您添加不遵循任何特定模式的自定义数字。缺点是,如果数组中有批次数字,它可能会变慢。