【问题标题】:Need a Regex that contains at least one number, zero or more letters, no spaces, min/max需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式
【发布时间】:2016-05-06 06:00:36
【问题描述】:

我需要一个正则表达式来匹配包含以下内容的字符串:

  • 至少一个数字
  • 零个或多个字母
  • 没有其他字符,如空格

字符串也必须最少 8 个字符,最多 13 个字符。

数字和/或字母在 8-13 个字符串中的位置无关紧要。我还没有弄清楚如何确保字符串包含一个数字,但这里有一些表达式不起作用,因为它们在在线工具 Regexr 中提取空格。往下看:

 - ([\w^/s]){8,13}
 - ([a-zA-Z0-9]){8,13}
 - ([a-zA-Z\d]){8,13}

我特别希望排除空格和特殊字符。链接和相关的问题似乎都允许这些字符。这不是用于验证密码,而是用于在自然语言处理中检测案例编号。这与“密码 REGEX 至少有 6 个字符,至少一个字母和一个数字,并且可能包含特殊字符”不同,因为我正在寻找至少一个数字但零个或多个字母。我也不想返回包含任何特殊字符(包括空格)的字符串。

【问题讨论】:

  • 我特别希望排除空格和特殊字符。链接和相关的问题似乎都允许这些字符。这不是用于验证密码,而是用于在自然语言处理中检测案例编号。
  • 在 SO 上回答了一千万个密码验证正则表达式问题,但这个问题是 Duplicate 吗?你一定是在开玩笑..
  • 使用这个^(?=.*\d)[a-zA-Z\d]{8,13}$
  • 非常感谢@sln,成功了!!我没有看到任何支持您的答案的选项。
  • @sln:发表你的答案。

标签: regex


【解决方案1】:

这是符合您要求的典型密码验证。
请注意,这也将匹配 8-13 位数字(但需要)。

1000 万 + 1 个(并且还在增加)满意的客户 ..

^(?=.*\d)[a-zA-Z\d]{8,13}$

解释

 ^                     # Beginning of string
 (?= .* \d )           # Lookahead for a digit
 [a-zA-Z\d]{8,13}      # Consume 8 to 13 alphanum characters
 $                     # End of string

【讨论】:

  • 谢谢。我的第一个问题是我正在拾取空间。答案看起来类似于我的第三次尝试,但我现在看到我在“消费 alpahnum”部分周围有括号,这可能导致了问题。
  • 考虑到匹配文档中字符串的目的,使用单词边界(\b 或类似,可能是空格+点字符类)进行锚定可能比克拉/美元更有用。 :)
  • @dannysauer - ^$ 是一个包罗万象的边界结构。它说:“由于人们对正则表达式的理解不足以解释复杂的边界概念,因此使用了基本的开始/结束锚点。”
  • 您是否允许使用零宽度的前瞻断言并且仍然声称简单? ;)
  • @dannysauer - 实际上,任何在角色之间操作的构造都是一个复杂的实体。短语zero-width 是公牛**,因为构造的内容与其他任何内容都匹配,但在不同的框架上。
【解决方案2】:

我在互联网上到处都看到了上面的答案(sln),但据我所知,它并不准确。

如果您的字符串包含 8 到 13 个没有数字的字符,则此表达式将匹配它,因为它在正向预测中使用通配符 . 上的 * 量词。

为了在至少 8 个字符长的密码中匹配至少 1 个数字、1 个 A-Z 和 1 个 a-z,您需要这样的东西:

(?=.{1,7}\d)(?=.{1,7}[a-z])(?=.{1,7}[A-Z])[a-zA-Z\d]{8,13}

它使用 3 个前瞻:

(?=.{1,7}\d)
(?=.{1,7}[a-z])
(?=.{1,7}[A-Z])

每次,它都会查找目标(例如第一个数字),但允许在它之前出现 1 到 7 个字符。 然后它将匹配 8 到 13 个字母数字字符。

Powershell 用户注意事项: 使用搜索组能够提取结果

$password = [regex]::match($string-to-search,'(?=.{1,7}\d)(?=.{1,7}[a-z])(?=.{1,7}[A-Z])([a-zA-Z\d]{8,13})').Groups[1].Value

【讨论】:

  • 不需要 3 次前瞻。此外,您的正则表达式匹配不想要的%*!:;123abcABC-'",但不匹配想要的123456789Demo。重新阅读问题。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2017-07-06
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多