需要包含至少一个数字,零个或多个字母,无空格,最小/最大

时间:2016-01-28 17:57:28

标签: regex

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

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

该字符串也必须至少包含8个字符,最多13个字符。

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

  • ([\瓦特^ /秒]){8,13}
  • ([A-ZA-Z0-9]){8,13}
  • ([A-ZA-Z \ d]){8,13}

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

2 个答案:

答案 0 :(得分:9)

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

一千万+ 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

答案 1 :(得分:0)

我已经在Internet上到处都看到了(通过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