Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接两个PCRE正则表达式,其中一个带有unicode字符_Php_Regex_Pcre - Fatal编程技术网

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字符串,将其合并为一个正确的字符串,其中包含的不仅仅是连接它们