Laravel 5.6正则表达式验证始终显示错误

时间:2018-11-14 08:53:19

标签: php regex laravel

我正在尝试针对正则表达式验证输入的字符串,这种方法在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.

请提出建议,谢谢!

1 个答案:

答案 0 :(得分:1)

您的正则表达式与预期匹配项列表中的最后一项不匹配。您可以将第二个选择与第一个选择结合使用,并使最后一个\W为可选:

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

请参见regex demo

详细信息

  • ^-字符串的开头
  • fl--fl_文字
  • (IV|I{1,3}|br-II)-一个捕获组(在?:之后添加(以使其不捕获)与IV,一到三个I或{ {1}}
  • br-II-连字符
  • --0位数以上
  • \d*-可选的非单词char
  • \W?-字符串的结尾。