如何验证 Laravel 中的“用户名”字段包含字母、数字、下划线和破折号?

cd4*_*ess 1 authentication validation laravel

public function store()\n{\n$this->validate(request(),[\n// Third try\n\xe2\x80\x98username\xe2\x80\x99 => \xe2\x80\x98required|string|regex:/\\w*$/|max:255|unique:users\xe2\x80\x99,\n// Second try\n\xe2\x80\x98username\xe2\x80\x99 => \xe2\x80\x98required|string|regex:/^[A-Za-z0-9]+(?:[_-][A-Za-z0-9]+)*$/|max:255|unique:users\xe2\x80\x98,\n// First try \n\xe2\x80\x99username\xe2\x80\x99 => \xe2\x80\x98required|string|max:255\xe2\x80\x99,\n]);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

用户名字段与包含的数字配合良好(第一次尝试),但后来我忘记包含 \xe2\x80\x9cunique:users\xe2\x80\x9d,然后表单开始拒绝它(重定向回用户名字段,并用 wriggle 下划线)红线)。另外,我已经多次使用 laravel\xe2\x80\x99s \xe2\x80\x9calpha_dash\xe2\x80\x9d 但一直拒绝输入。我的目标是字母、数字、下划线和破折号的混合。

\n

请一些人帮我解决这个问题。谢谢

\n

IGP*_*IGP 5

你缺少参数。它应该是unique:table,column,except,primarykeyname

最后两个参数是可选的。在您的情况下,存储用户的验证应如下所示:

'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username',
Run Code Online (Sandbox Code Playgroud)

这样,您就可以说数据库中不应该存在具有相同用户名的用户。

但是,当您想要更新用户时,您应该添加用户的 ID 作为第三个参数,以便唯一用户名的验证会忽略您尝试更新的用户。

'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username,'.$user->id,
Run Code Online (Sandbox Code Playgroud)

如果您的主键未命名为 id,则将其名称添加为第四个参数:

'username' => 'required|string|regex:/\w*$/|max:255|unique:users,username,'.$user->userId.',userId',
Run Code Online (Sandbox Code Playgroud)