regex - 工作正则表达式在 Laravel 验证中不起作用

标签 regex laravel validation

我有自定义正则表达式,用于验证社交网站中的用户个人资料网址:

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

查看演示 here .

代码:

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(): No ending delimiter '/' found

正则表达式在我的 php 代码中成功运行:

$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 "</pre>";

结果:

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
        )

)

最佳答案

竖线字符“|”在验证中具有特殊的功能,它分隔您的验证规则,例如:

$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(); 
}

关于regex - 工作正则表达式在 Laravel 验证中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52966508/

相关文章:

javascript - 如何找到以某个字符开头的字符串单词?

MySQL 正则表达式列表

python - 如何替换字符串中其他某些字符之后的某些字符,Python?

php - laravel 集合复杂和/或表达式

php - Laravel - 调用存储库中未定义的方法

java - 验证多个 edittext 并显示 edittext.setError ("String");

javascript - TypeScript - 数字更大还是更小验证仅当数字具有相同的 'length' 时才会响应

c# - 在 C# 中检查文件名是否*可能*有效(不存在)

javascript - 正则表达式:准确匹配输入中的粗体 (**) 和斜体 (*) 项

php - Laravel:找不到接口(interface) 'Illuminate\Contracts\Queue\QueueableCollection'