在 laravel 字符串验证中避免使用 html 标签

Avoid html tags in laravel string validation

我想阻止用户在注册时在他们的用户名字段中使用 html 标签,我该怎么做?

例如目前我有一个用户他用这样的用户名注册

E7JfyqxE4lsbqQ <html><a href="https://www.apple.com"><img src="https://...../d28/2011/19/93045d3fb9c4.jpg" width="600" height="234" alt="bill"></a> </html>

我只想允许字母和数字(a-z,0-9)就这样。

RegisterController

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'username' => 'required|string|max:255|unique:users|not_exist',
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
    ]);
}

你可以这样做

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'username' => [
          'required',
          'string',
          'max:255',
          'string',
          'unique:users',
          'not_exist',
          'not_regex:<\s*a[^>]*>(.*?)<\s*/\s*a>'
        ],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
    ]);
}

如果要包含更多内容,可以添加更多正则表达式

如果您只想允许字母数字字符,您可以使用 Laravel 的内置 alpha_num 验证。

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'alpha_num', 'max:255'],
        'username' => 'required|string|alpha_num|max:255|unique:users|not_exist',
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
    ]);
}