【问题标题】:Regex to check for at least 3 characters?正则表达式检查至少 3 个字符?
【发布时间】:2013-03-11 14:25:26
【问题描述】:

我有这个正则表达式只允许字母数字字符。

如何检查字符串是否也至少包含 3 个字母字符。

我目前的正则表达式,

if(!/^[a-zA-Z0-9]+$/.test(val))

我想强制执行字符串以确保至少有 3 个连续的字母字符;

111 // false
aaa1 // true
11a // false
bbc // true
1a1aa // false

【问题讨论】:

  • 使用{3,} 而不是+
  • @ka 匹配任何字符串中的至少三个字符而不是至少三个字母
  • 它不起作用111仍然被接受。
  • {3,} 表示字符串必须至少匹配 3 个字符。如果您在逗号后添加一个数字,也会设置最大限制。
  • 三个字母必须连续吗?

标签: regex


【解决方案1】:

+ 表示“1 次或多次出现”。

{3} 表示“出现 3 次”。

{3,} 表示“出现 3 次或更多次”。

+也可以写成{1,}

*也可以写成{0,}

【讨论】:

  • 我不认为这回答了问题,它回答了对问题本身没有回答问题的评论。
  • 是的 - 但对于理解先前答案之一的逻辑仍然非常有帮助。
【解决方案2】:

要在任何地方强制使用三个字母字符,

/(.*[a-z]){3}/i

应该足够了。

编辑。啊,你已经编辑了你的问题,说三个字母字符必须是连续的。我还看到您可能希望强制 all 字符应与您的“接受”字符之一匹配。那么,前瞻可能是最干净的解决方案:

/^(?.*[a-z]{3})[a-z0-9]+$/i

请注意,我使用了不区分大小写的修饰符/i,以避免写a-zA-Z

替代方案。您可以阅读有关lookaround assertions here 的更多信息。但在这个阶段,它可能有点过头了。这里有一个替代方案,您可能会发现根据您已经知道的内容更容易分解:

/^([a-z0-9]*[a-z]){3}[a-z0-9]*$/i

【讨论】:

  • 对于那些希望在grepgit grep 上下文中使用它的人,您需要-E 选项(又名--extended-regexp)才能理解{n} 量词。
【解决方案3】:

这应该可以完成工作:

^([0-9]*[a-zA-Z]){3,}[0-9]*$

它检查至少 3 个“零个或多个数字 + 1 个 Alpha”序列 + 零个或多个数字。

【讨论】:

    【解决方案4】:

    您想匹配零个或多个数字,然后是 3 个连续的字母,然后是任何其他数字?

    /\d*(?:[a-zA-Z]){3,}\d*/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多