Php 连接两个PCRE正则表达式,其中一个带有unicode字符
我想为电话号码写一个正则表达式。第一种模式使用英语数字,第二种模式使用波斯语数字。如何使用Php 连接两个PCRE正则表达式,其中一个带有unicode字符,php,regex,pcre,Php,Regex,Pcre,我想为电话号码写一个正则表达式。第一种模式使用英语数字,第二种模式使用波斯语数字。如何使用|连接这些模式 $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)", $
|
连接这些模式
$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
分隔符放在第二个模式的末尾,并且每个子模式(pattern1和pattern2)应该有它们的分隔符,或者整个连接的pattern应该只有一个分隔符(例如/pattern1 | pattern2/u
)preg\u match
正在考虑(
和)
作为正则表达式的分隔符,虽然它不是,但由于紧随其后的是
,所以它说
是一个未知的修饰符
尝试使用以下方法:
$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))
请注意,我在连接模式后放置分隔符。简单的方法是在if子句中使用两个单独的preg_match-statement和| |。另一种方法是重写两个regexp字符串,将其合并为一个正确的字符串,其中包含的不仅仅是连接它们