簡體   English   中英

連接兩個PCRE正則表達式,一個帶有unicode字符

[英]Concatenate two PCRE regex, one with unicode characters

我想為電話號碼寫一個正則表達式。 第一種模式使用英文數字,​​第二種模式使用波斯數字。 如何使用|連接這些模式

   $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)應具有其分隔符,或者整個串聯的pattarn應該僅具有一個分隔符(例如/pattern1|pattern2/u

preg_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))

請注意,我在連接模式之后放置了定界符。

簡單的方法是使用兩個單獨的帶有||的preg_match-statements 在if子句中。 另一種方法是重寫兩個regexp字符串,以將其組合為一個正確的字符串,這不僅包括將它們串聯在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM