仅在 Laravel 5.4 用户名上验证英文字母和数字 [重复]

Posted

技术标签:

【中文标题】仅在 Laravel 5.4 用户名上验证英文字母和数字 [重复]【英文标题】:Validate on Laravel 5.4 username only English letters and numbers [duplicate] 【发布时间】:2018-07-16 09:01:12 【问题描述】:

我有一个基于 Laravel 5.4 构建的网站

我遇到了一个问题,注册用户时,我只需要用英文字母和数字来解析username

我在控制器中有一个方法。

protected function validator(array $data)

   return Validator::make($data, [
       'username' => 'required|string|without_spaces|max:255|unique:users',
       'email' => 'string|email|max:255|unique:users|nullable',
       'password' => 'string|min:6|confirmed|nullable',
   ]);

有没有办法做到这一点?我被灌输了alpha_num的规则,但事情并没有成功。

【问题讨论】:

[A-Za-z0-9] 是 A 到 Z、a 到 z 和 0 - 9 的标准正则表达式。您应该匹配模式或(可能是一个坏主意)字典列表。 这里有类似的答案***.com/questions/38646494/… without_spaces 是什么?这是新规则还是习惯? without_spaces 是自定义规则 我用服务提供商中的正则表达式写了这条规则without_spaces 【参考方案1】:

试试这个代码

'username' => ['required',
               'string', 
               'unique:users',
               'regex:/^([a-z])+?(_)?([a-z0-9])+$/i',
              ],

在用户模型中添加

public function setUsernameAttribute($value)
    
        $this->attributes['username'] = strtolower($value);
    

【讨论】:

这要求值以字母开头,允许下划线,并强制小写;这些要求都不是问题的一部分。 此函数将值 username 设置为字母和 (regex:/^([az])+?(_)?([a-z0-9])+$/i) 来验证不带空格的用户名,如果需要,可以在第一个字符后仅使用一次下划线【参考方案2】:

您有两个选项

选项 A:您应该简单地将这个正则表达式放在验证方法中,例如:

    'username' => ['required', 'string', 'max:255', 'unique:users',
                                       'regex:/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/'],

选项 B: alpha_dash 是一个默认的 Laravel 验证规则,它允许字母、数字、破折号和下划线,而不是空格。

当您实施alpha_dash 规则时,正在验证的字段可能包含字母数字字符,以及破折号和下划线:

'username' => ['required', 'string', 'max:255', 'unique:users', 'alpha_dash'],

【讨论】:

这允许使用破折号和下划线,这不是要求的。【参考方案3】:

使用alpha_dash

正在验证的字段可能有alpha-numericcharacters,以及dashesunderscores

required|alpha_dash|max:255|unique:users

【讨论】:

这允许使用破折号和下划线,这不是要求的。 用户名必须支持破折号和下划线【参考方案4】:

您只需添加alpha 验证即可解决问题。

'username' => 'required|alpha|max:255|unique:users',

【讨论】:

这不允许问题中要求的数字。【参考方案5】:

试试这个代码:

'username' => 'required|string|without_spaces|max:255|unique:users|regex:/^[A-Za-z][A-Za-z0-9]*$/',

【讨论】:

这要求值以字母开头,这不是问题的一部分。【参考方案6】:
 'username' => 'required|string|without_spaces|max:255|unique:users|regex:/(^([a-zA-Z]+)(\d+)?$)/u',

【讨论】:

这个正则表达式只允许字母,可选地后跟数字,这不是 OP 要求的。

以上是关于仅在 Laravel 5.4 用户名上验证英文字母和数字 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4:如何验证图像大小?

Laravel 5.4 验证请求,如何处理更新时的唯一验证?

使用一张表 Laravel 5.4 进行多重身份验证

如果用户未使用中间件进行身份验证,Laravel 5.4 将重定向到特定页面

Laravel 5.4 - 单击电子邮件中的验证链接时未传递或发送电子邮件验证令牌令牌。

Laravel 5.4:在两个表上具有多重身份验证的 JWT API 一个有效,另一个无效