要求至少有一个字母字符

6

我们有一个登录表单,允许您输入您的user_idplayer_tag。我们有一个以下规则的模型:

protected $rules = ['player_tag' => 'required|unique|min:3|max:15|regex:/^[a-zA-Z0-9_]+$/'];

有没有一种方法可以添加规则,要求player_tag字段至少包含一个字母字符(a-zA-Z)?


所以,只是为了明确,您希望它至少包含一个 a-zA-Z,但也允许 0-9 吗? - Mark Davidson
@MarkDavidson 是的,那是正确的。所以,123 将是无效的,但 a231b323sdf 将是有效的。 - Get Off My Lawn
1
有道理。虽然我没有尝试过,但你可以添加另一个正则表达式规则,类似于 regex:/^.*[a-zA-Z].*$/',在当前正则表达式之前匹配,然后执行其他正则表达式进行最终检查。 - Mark Davidson
也许有人能回答这个问题,我只是在查看一些问题:OP是否可以使用strpos()并要求它返回一个值?虽然我想那可能比直接使用正则表达式效率低。 - brianforan
3个回答

5

1
专业正则表达式,但您多了一个括号。 - Mark Davidson
2
为什么“可能会有帮助”?一个好的答案总是会解释做了什么以及为什么要这样做,不仅为了OP,也为了未来访问SO的用户。 - Jay Blanchard
1
这也将匹配任何非字母数字字符,而意图(至少从问题中所显示的)是仅允许下划线 _ 除了字母数字。 - Bogdan
这看起来像是我期望的工作方式! - Get Off My Lawn
1
这就是我所警告的。这个答案中的正则表达式将允许像 pl@yerplayeЯ 或者甚至是 pl ay er(注意空格)这样的值。 - JHoffmann
显示剩余2条评论

2

如果字段开头应该有一个字母字符,您可以简单地扩展正则表达式以在开头检查一个这样的字符:

/^[a-zA-Z][a-zA-Z0-9_]*$/

为了要求至少一个字母字符而不指定位置,只需使用以下正则表达式:
/^[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$/

谢谢,第二个正是我要找的。 - Moauya Meghari

0

尝试这种方法

/^\d*[a-zA-Z][a-zA-Z0-9]*$/
解释: 1. 0个或多个数字; 2. 至少1个字符;//这将确保至少有一个字母条件 3. 0个或1个字母数字字符;

1
为什么应该让 OP “尝试这种方式”?一个好的答案总是会解释做了什么以及为什么要那样做,不仅为了 OP,也为了未来访问 Stack Overflow 的访客。 - Jay Blanchard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接