У меня есть два регулярных выражения:
'/^(?: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(?: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}$/
^
Попытка интерпретировать то, что следовало, как модификаторы, таким образом, у вас есть сообщение об ошибке.
Других решений пока нет …