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;
}

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

Я использовал для инициализации $ regex с:

$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|2|3|4]([ ]|,|-|[()]){0,2}(?:[0-9]([ ]|,|-|[()]){0,2}){8}
^

Конкатенация строк, которую вы сделали, заставила php понять, что ваше регулярное выражение завершилось после этой обратной косой черты:

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

Попытка интерпретировать то, что следовало, как модификаторы, таким образом, у вас есть сообщение об ошибке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]