我正在尝试针对正则表达式验证输入的字符串,这种方法在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.
请提出建议,谢谢!
答案 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?
-字符串的结尾。