Laravel验证中编写正则禁止用户名字段输入邮箱地址的方法
Laravel用户名禁止输入邮箱的正则验证实现
核心实现思路
通过否定前瞻正则匹配,拦截符合邮箱特征的输入内容,Laravel中使用regex规则时优先用数组格式定义验证规则,避免竖线分隔导致正则解析错误。
正则方案1:宽泛拦截(只要包含邮箱特征就禁止)
只要输入内容包含@且@后存在.就拦截,适合完全不允许用户名出现邮箱相关格式的场景,正则为:/^(?!.*@.*\..*).*$/u
完整验证规则写法:
'username' => [ 'required', 'min:5', 'regex:/^(?!.*@.*\..*).*$/u' ]
正则方案2:精准拦截(仅禁止完整标准邮箱格式)
仅当输入完全符合标准邮箱格式时才拦截,允许带@但不符合邮箱规则的内容,正则为:/^(?!^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$).*$/u
完整验证规则写法:
'username' => [ 'required', 'min:5', 'regex:/^(?!^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$).*$/u' ]
补充说明
- 正则末尾的
u修饰符用于兼容中文等多字节用户名,若用户名仅允许英文数字可去掉 - 两种方案可根据业务需求灵活选择,方案1拦截逻辑更严格,方案2兼容性更强
内容的提问来源于stack exchange,提问作者Mohammad Jalili
相关产品推荐
相关产品推荐

