0

我想为电话号码写一个正则表达式。第一种模式使用英文数字,​​第二种模式使用波斯数字。如何使用 连接这些模式|

   $pattern1 = '/^(\d{4})?\s?[1-9]{1}[0-9]{6}$/';
   $pattern2 = '/^([\x{0660}-\x{0669}]{4})?\s?[\x{0661}-\x{0669}]{1}[\x{0660}-\x{0669}]{6}$/u';

这不起作用:

if (preg_match("($pattern1)|($pattern2)", $phone_number))...

并打印此警告:

Warning: preg_match(): Unknown modifier '|'

我也不确定/u分隔符是否应该放在第二个模式的末尾,并且每个子模式(模式 1 和模式 2)应该有它们的分隔符,或者整个连接的模式应该只有一个分隔符(例如/pattern1|pattern2/u

4

2 回答 2

0

preg_match正在考虑(and)作为正则表达式的分隔符,而它不是并且因为|紧随其后,这就是为什么它说这|是一个未知的修饰符。

尝试使用这个:

$pattern1 = '^(\d{4})?\s?[1-9]{1}[0-9]{6}$';
$pattern2 = '^([\x{0660}-\x{0669}]{4})?\s?[\x{0661}-\x{0669}]{1}[\x{0660}-\x{0669}]{6}$';

if (preg_match("/" . $pattern1 . "|" . $pattern2 . "/u", $phone_number))

请注意,我在连接模式后放置了分隔符。

于 2013-09-15T09:32:03.697 回答
0

简单的方法是使用两个单独的 preg_match-statements 和 || 在 if 子句中。另一种方法是重写两个正则表达式字符串以将其组合成一个正确的字符串,其中包括的不仅仅是连接它们。

于 2013-09-15T09:32:10.537 回答