我不太擅长RegEx,想知道是否有人可以帮助解释我如何才能不允许以下内容。我想阻止用户能够在字符串中输入任何表情符号,以及只有标点符号。例如
".." => fail
"-----" => fail
",,,," => fail
"Mc-Donald" => pass
字符串中的任何表情符号也会导致失败。
我正在考虑为此设置一个自定义的Laravel规则,使用正则表达式来检查字符串是否只包含标点符号或任何表情符号。
也许一个更好的方法可能是一个RegEx只允许某些字符?因为我只允许字母,数字和标点符号(而不仅仅是标点符号本身)
谢谢你的帮助!
查看验证规则alpha_dash
https://laravel.com/docs/9.x/validation#rule-alpha-dash或alpha_num
。如果您想对它进行微调,可以使用以下代码自定义您自己的regex:
(将此添加到服务提供者)
Validator::extend('alpha_num_dash', function($attribute, $value) {
if(!is_string($value) && !is_numeric($value)) {
return false;
}
return preg_match('/^[a-zA-Z0-9-]+$/', $value);
});
我不会在这里解释正则表达式的含义,因为它超出了范围。查阅指南,你很快就能掌握其中的窍门。此外,您可以尝试像https://regex101.com/r/PxtN3U/1这样的在线服务来修补正则表达式。
有一个php函数ctype_punct"检查任何非空格或字母数字字符的可打印字符"。
像这样:
$validator = Validator::make($request->all(), [
'title' => [
'required',
'max:255',
function ($attribute, $value, $fail) {
if (ctype_punct($value)) {
$fail('The '.$attribute.' is invalid.');
}
},
],
]);
更详细的验证将需要正则表达式,例如必须包含至少一个"字母字符":
$validator = Validator::make($request->all(), [
'title' => ['required','max:255','regex:/[a-zA-Z]/'],
]);