首页 > 解决方案 > Laravel 5.6 正则表达式验证总是显示错误

问题描述

我正在尝试根据正则表达式验证输入的字符串,这在regexrregex101等网站上运行良好,但在 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.

请推荐,谢谢!

标签: phpregexlaravel

解决方案


您的正则表达式与预期匹配列表中的最后一项不匹配。您可以将第二个备选方案与第一个备选方案结合起来,并将最后一个备选方案设为\W可选:

/^fl-(IV|I{1,3}|br-II)-\d*\W?$/i

查看正则表达式演示

细节

  • ^- 字符串的开始
  • fl-- 一段fl_文字
  • (IV|I{1,3}|br-II)- 一个捕获组(添加?:(使其不捕获)匹配IV,一到三个Is 或br-II
  • -- 一个连字符
  • \d*- 0+ 位数
  • \W?- 一个可选的非单词字符
  • $- 字符串结束。

推荐阅读