2017-01-09 18 views
0

私は2つの正規表現があります。Laravel - アサーション複数の正規表現

'/^(?:0(?:21|9[0-9]))?[0-9]{8}$/' 

そして

'/(0|\\+98 | 98)?([ ]|,|-|[()]){0,2}9[1|2|3|4]([ ]|,|-|[()]){0,2}(?:[0-9]([ ]|,|-|[()]){0,2}){8}/' 

は私がアサーション:: Laravelで正規表現メソッドを使用します。ここではその方法は次のとおりです。

Assertion.php:アサーションで複数の正規表現を使用して確認する方法

public static function regex($value, $pattern, $message = null, $propertyPath = null) 
{ 
    static::string($value, $message, $propertyPath); 

    if (! preg_match($pattern, $value)) { 
     $message = sprintf(
      $message ?: 'Value "%s" does not match expression.', 
      static::stringify($value) 
     ); 

     throw static::createException($value, $message, static::INVALID_REGEX, $propertyPath, array('pattern' => $pattern)); 
    } 

    return true; 
} 

::正規表現($電話、$の正規表現)。

私は$の正規表現を初期化するために使用:実は、私はエラーを与えた

$regex = '/^(?:0(?:21|9[0-9]))?[0-9]{8}$/ | /(0|\\+98 | 98)?([ ]|,|-|[()]){0,2}9[1|2|3|4]([ ]|,|-|[()]){0,2}(?:[0-9]([ ]|,|-|[()]){0,2}){8}/' 

するpreg_match():未知の修飾子を '|'

ご提案がありますか?

+0

最初の正規表現はアンカーされており、2番目の正規表現はアンカーされていません。それは意図されていますか?はいの場合は[?(?:^(?: 0)(?:21 | 9 [0-9]))[0-9] {8} $ |(0 | \ 98 | 98)? {0,2} 9 [1-4] [ - 、()] {0,2}(?:[0-9] [ - 、()] {0,2}){8 }) '](https://regex101.com/r/1ssxXA/3)。そうでなければ、['^(?:(?: 0)?{0-9} {8} |(0 | \ 98 | 98)?[ - 、 (0)} {0、}({0,2}){8})$ {0,2} 9 [1-4] [ - '](https://regex101.com/r/1ssxXA/2)。 –

答えて

1

あなたはパイプが正規表現の範囲内でなければならない2つの正規表現の間で交替を使用する場合:

^(?:0(?:21|9[0-9]))?[0-9]{8}$|(0|\\+98 | 98)?([ ]|,|-|[()]){0,2}9[1|2|3|4]([ ]|,|-|[()]){0,2}(?:[0-9]([ ]|,|-|[()]){0,2}){8} 
          ^

文字列の連結あなたの正規表現は、このバックスラッシュの後に終了したことを理解することは、リードPHPをした:

/^(?:0(?:21|9[0-9]))?[0-9]{8}$/ 
          ^

修飾子として続くものを解釈しようとしています。したがって、あなたが持っているエラーメッセージです。

+0

ありがとうございます。 – AFN