2017-01-09 3 views
0

У меня есть два регулярные выражения:Laravel - Assertion множественного регулярное выражение

'/^(?: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}/' 

Я хочу использовать Assertion :: регулярки метод в 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; 
} 

Как использовать и проверить несколько регулярных выражений в Assertion :: регулярное выражение ($ телефон, $ регулярное выражение);?

Я использовал для инициализации $ регулярного выражения с:

$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

Ваше первое регулярное выражение закреплено, а второе - нет. Это предназначено? Если да, вы можете использовать ['(?:^(?: 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 (?: 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/2). –

ответ

1

Если вы хотите использовать чередование между двумя регулярными выражениями труба должна быть в пределах регулярного выражения:

^(?: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