需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式

Posted

技术标签:

【中文标题】需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式【英文标题】: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:发表你的答案。 【参考方案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-'",但不匹配想要的123456789。 Demo。重新阅读问题。

以上是关于需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

R REGEX匹配-至少1个小写字母,1个数字,并且没有8个长度的特殊字符[重复]

validate插件:验证密码没有空格 用户名是5-10位 至少包含数字和大小写字母中的两种字符

数据结构之串类型

phplinuxjavascript 正则表达式

文件管理-3week

正则表达式的总结