首页 > 解决方案 > 正则表达式:Laravel 中的模式验证

问题描述

我尝试在 Laravel 中验证 facebook.com 网址。这是我的正则表达式:

    'facebook' => 'url|regex:((?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*))|nullable',

它适用于在线正则表达式测试网站 ( https://regex101.com/ ),但在Laravel. 我有错误

“preg_match():没有找到结束匹配分隔符')'”。

问题是什么?

标签: phpregexlaravelvalidation

解决方案


请参阅官方文档中的此注释:

使用 regex / not_regex 模式时,可能需要在数组中指定规则而不是使用管道分隔符,尤其是当正则表达式包含管道字符时。

所以,这应该工作:

'facebook' => ['url', 'regex:/(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*))/', 'nullable']

推荐阅读