Рабочее регулярное выражение не работает в проверке Laravel - PullRequest
0 голосов
/ 24 октября 2018

У меня есть пользовательское регулярное выражение для проверки URL профиля пользователя в социальных сетях:

/(?:https:\/\/)?(?:http:\/\/)?(?:www\.)?(?:ok|odnoklassniki)\.ru\/(?:\w*#!\/)?([\w-]*)/

См. Демонстрацию здесь .

Код:

if(isset($request->odnoklassniki)) {
    $this->validate($request, [
        'odnoklassniki' => 'regex:/(?:https:\/\/)?(?:http:\/\/)?(?:www\.)?(?:ok|odnoklassniki)\.ru\/(?:\w*#!\/)?([\w-]*)?/'
    ], ['regex' => 'Enter correct url to your profile in this website']);
    $candidate->odnoklassniki = $request->odnoklassniki;
    $candidate->save(); 
}

Сообщение об ошибке:

preg_match (): не найден конечный разделитель '/'

Regex успешно работает вmy php код :

<code>$re = '/(?:https:\/\/)?(?:http:\/\/)?(?:www\.)?(?:ok|odnoklassniki)\.ru\/(?:\w*#!\/)?([\w-]*)/m';
$str = 'https://www.odnoklassniki.ru/username

http://odnoklassniki.ru/username

ok.ru/username
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
echo "<pre>";
    print_r($matches);
echo "
";

Результат:

Array
(
    [0] => Array
        (
            [0] => https://www.odnoklassniki.ru/username
            [1] => username
        )

    [1] => Array
        (
            [0] => http://odnoklassniki.ru/username
            [1] => username
        )

    [2] => Array
        (
            [0] => ok.ru/username
            [1] => username
        )

)

1 Ответ

0 голосов
/ 24 октября 2018

Символ канала " | " имеет специальную функцию при проверке, он разделяет ваши правила проверки, например:

$validatedData = $request->validate([
    'title' => 'required|unique:posts|max:255'
]);

Но так как ваша проверка регулярного выражения включает в себя символ канала, выМожно использовать другой метод объявления правил проверки

$validatedData = $request->validate([
    'title' => [
        'required',
        'unique:posts',
        'max:255'
    ]
]);

Так что это решение вашей проблемы:

if(isset($request->odnoklassniki)) {
    $this->validate($request, [
        'odnoklassniki' => [
            'regex:/(?:https:\/\/)?(?:http:\/\/)?(?:www\.)?(?:ok|odnoklassniki)\.ru\/(?:\w*#!\/)?([\w-]*)?/'
        ]
    ], ['regex' => 'Enter correct url to your profile in this website']);
    $candidate->odnoklassniki = $request->odnoklassniki;
    $candidate->save(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...