匹配正则表达式中的前三个数字

时间:2014-04-25 12:11:40

标签: php regex

我有正则表达式匹配美国数字:

\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}

虽然我检查前三位数字作为我们的数字,但我只有很少的区号,并且只想用这个区号来过滤麻木。

$area_code = array(201,202,203,2,04);

只允许此数组值中包含前三位数的数字。正则表达式需要修改什么?

2 个答案:

答案 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数组中的某个值开头,那么该数字会匹配。这种方法优于另一种方法的优点是,这可以让您添加不遵循任何特定模式的自定义数字。缺点是,如果数组中有批次数字,它可能会变慢。

Regex101 Demo