【问题标题】:Require at least one alpha character至少需要一个字母字符
【发布时间】:2016-06-04 04:10:46
【问题描述】:

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

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

有没有办法添加要求player_tag 字段至少包含 1 个字母字符 (a-zA-Z) 的规则?

【问题讨论】:

  • 所以为了清楚起见,您希望它至少包含一个a-zA-Z,但也允许0-9
  • @MarkDavidson 是的,这是正确的。因此,123 将无效,但 a231b323sdf 将有效
  • 有道理。我还没有尝试过,但是您能否在当前应该匹配的正则表达式之前添加另一个正则表达式规则,例如 regex:/^.*[a-zA-Z].*$/',然后移动到您的另一个正则表达式进行最终检查。
  • 也许有人可以回答这是否可能,我只是在检查一些问题:OP 可以使用 strpos() 并要求它返回一个值吗?虽然我认为这可能比直接正则表达式效率低

标签: php regex validation laravel


【解决方案1】:

这可能会对您有所帮助:

^(?=.*[a-zA-Z]).+$

这是一个工作示例:https://regex101.com/r/gD3gR6/2

【讨论】:

  • 专业正则表达式,但你有一个额外的括号
  • 为什么“这可能会有所帮助”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,也适用于 SO 的未来访问者。
  • 这也将匹配任何非字母数字字符,当意图(至少从问题中出现的内容)是除了字母数字之外只允许下划线_
  • 这看起来就像我正在寻找的那样工作!
  • 这就是我要警告的。此答案中的正则表达式将允许pl@yerplayeЯ 甚至pl ay er 之类的值(注意空格)。
【解决方案2】:

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

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

要要求至少有一个不带特定位置的字母字符,只需使用以下正则表达式:

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

【讨论】:

  • 谢谢,第二个正是我要找的。​​span>
【解决方案3】:

试试这个方法

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

解释:

1. 0 位或更多位;

2. 至少 1 个字符; //这将确保您至少有一个 alpha 条件

3. 0 或 1 个字母数字字符;

【讨论】:

  • 为什么 OP 应该“尝试这种方式”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,也适用于 SO 的未来访问者。
猜你喜欢
  • 2013-05-27
  • 2011-07-21
  • 1970-01-01
  • 2021-01-26
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 2014-05-12
相关资源
最近更新 更多