仅在 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-numeric
、characters
,以及dashes
和underscores
。
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 将重定向到特定页面