所以我已经用不同的regex模式验证了密码,现在我想为每个模式返回不同的验证消息,这样用户就可以得到准确的错误消息,我不想为所有模式返回一条消息。
所以到目前为止,我所尝试的都低于
$request->validate([
'password'=>[
'required',
'min:8',
'string',
'regex:/[a-z]/',
'regex:/[A-Z]/',
'regex:/[0-9]/',
'regex:/[@$!%*#?&]/', //required special chars
'not_regex:/^(20|19|0)/', //must not start with 20 or 19 or 0
'not_regex:/(.)1{1}/', //doubles are not allowed
'not_regex:/(123(?:4(?:5(?:6(?:7(?:89?)?)?)?)?)?|234(?:5(?:6(?:7(?:89?)?)?)?)?|345(?:6(?:7(?:89?)?)?)?|456(?:7(?:89?)?)?|567(?:89?)?|6789?|789)/', //sequential number must not be more than 2
]
],[
'password.regex.0'=>'password must contain a lower case character',
'password.regex.1'=>'password must contain an upper case character',
]);
但是自定义消息不适用于regex模式,它只返回公共消息";密码格式无效"有什么理想的方法可以做到这一点吗?
注意:我已经检查了所有的堆栈溢出问题,但没有解决方案,我的验证工作正常,只需要返回特定的错误每个模式的消息。
您可以为每个正则表达式创建一个自定义验证规则,每个正则表达式中都有相应的消息,也可以使用内联闭包。
$request->validate([
'password'=>[
'required',
'min:8',
'string',
function ($attribute, $value, $fail) {
if (!preg_match(“/[@$!%*#?&]/“, $value)) {
$fail('You must include a special character.');
}
},
// ...
]
],[
'password.regex.0'=>'password must contain a lower case character',
'password.regex.1'=>'password must contain an upper case character',
]);