php - Laravel 5.6 正则表达式验证总是显示错误
问题描述
我正在尝试根据正则表达式验证输入的字符串,这在regexr和regex101等网站上运行良好,但在 laravel 中总是显示错误。
正则表达式应与以下字符串匹配:
FL-IV-1234
FL-III-1234
FL-II-56789
FL-I-1234334
FL-BR-II-53440
fl-iv-8484
fl-iii-84894
fl-ii-94
fl-i-334
表达:
/(fl)-(IV-|I{1,3}-)(\d*\W)|((fl)-(br)-II-\d*\W)/i
代码:
$pattern = '/(fl)-(IV-|I{1,3}-)(\d*\W)|((fl)-(br)-II-\d*\W)/i';
$request->validate([
'lic_no' => array('required', 'regex:'.$pattern),
]);
也试过没有变量:
$request->validate([
'lic_no' => array('required', 'regex:/(fl)-(IV-|I{1,3}-)(\d*\W)|((fl)-(br)-II-\d*\W)/'),
]);
错误信息:
The lic no format is invalid.
请推荐,谢谢!
解决方案
您的正则表达式与预期匹配列表中的最后一项不匹配。您可以将第二个备选方案与第一个备选方案结合起来,并将最后一个备选方案设为\W
可选:
/^fl-(IV|I{1,3}|br-II)-\d*\W?$/i
查看正则表达式演示
细节
^
- 字符串的开始fl-
- 一段fl_
文字(IV|I{1,3}|br-II)
- 一个捕获组(添加?:
后(
使其不捕获)匹配IV
,一到三个I
s 或br-II
-
- 一个连字符\d*
- 0+ 位数\W?
- 一个可选的非单词字符$
- 字符串结束。
推荐阅读
- angular - 哪个角管对数字进行舍入并去掉它的小数?
- spfx - 如何使用 Pnp Map 控件同时显示多个标记
- sql - 如何在使用 VBA 循环遍历下拉列表时刷新 Excel 工作表中的 SQL 查询?
- windows - Gitlab工件上传太慢了
- python - RDD 中的行对象
- php - 将文件从共享驱动器复制到php中的文件夹
- google-apps-script - 删除字符串元素表中的逗号并删除重复项
- c# - 在 C# 中同时打开类型时使用 goto 在 switch 中切换
- mysql - MySQL:查找文本列精确一个空格的记录
- java - 即使在上下文初始化后如何更新弹簧重试属性