我需要一个与包含以下内容的字符串匹配的正则表达式:
该字符串也必须至少包含8个字符,最多13个字符。
在8-13个字符串中放置数字和/或字母无关紧要。我还没弄清楚如何确保字符串中包含数字,但是这里有一些表达不起作用,因为它们在在线工具Regexr中占用了空格:
我特意想要排除空格和特殊字符。链接和相关问题似乎都允许这些字符。这不是用于验证密码,而是用于检测自然语言处理中的案例编号。这与"密码REGEX不同,最小6个字符,至少一个字母和一个数字,可能包含特殊字符"因为我正在寻找至少一个数字但零个或多个字母。我也不想返回包含任何特殊字符的字符串,包括空格。
答案 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