我需要Regexp来验证字符串的最小长度为6,并且它至少包含一个非字母数字字符,例如:"eN%{S$u)"
,"h9YI!>4j"
,"{9YI!;4j"
,"eN%{S$usdf)"
, "dfh9YI!>4j"
,"ghffg{9YI!;4j"
。
这个工作正常^.*(?=.{6,})(?=.*\\d).*$"
但是在字符串不包含任何数字(例如"eN%{S$u)"
)的情况下,它不起作用。
答案 0 :(得分:11)
^(?=.{6})(.*[^0-9a-zA-Z].*)$
我们使用正向前瞻来确保至少有6个字符。然后我们匹配查找至少一个非字母数字字符([^0-9a-zA-Z]
)的模式。 .*
匹配这个非字母数字字符周围的任意数字,但到我们到达此处时,我们已经检查过我们匹配的字符数至少为6。
^.*(?=.{6,})(?=.*\\d).*$"
是你试过的正则表达式。以下是一些建议:
\d
匹配一个数字,(?=.*\\d)
是其中一个数字的预测。这就是您遇到类似eN%{S$u)
等字符串时遇到的问题的原因。.*
将第二个前瞻与后面的.*\\d.*
结合使用。答案 1 :(得分:3)
^(?=.*?[^0-9a-zA-Z]).{6}
因此,如果您要添加上述附加条件,则可能是这样的:
^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6}
如您所见,此模式易于扩展。请注意,is is仅用于检查匹配,其捕获无用。
答案 2 :(得分:1)
保持简单。
// long enough and contains something not digit or a-z
x.Length >= 6 && Regex.IsMatch(x, @"[^\da-zA-Z]")
快乐的编码。
编辑,纯粹的“正则表达式”:
这首先声明在前瞻中有6个字母,然后确保在前瞻中有一些不是字母数字的东西(它会“扔掉”直到前5个字符尝试匹配)。
(?=.{6}).{0,5}[^\da-zA-Z]
答案 3 :(得分:0)
那(固定):^(?=.{6})(.*[^\w].*)$
检查一下http://www.ultrapico.com/Expresso.htm这是一个很酷的工具,它可以帮助你在Regexps学习中获得很多。