我需要 Regexp 来验证字符串的最小长度为 6,并且它至少包含一个非字母数字字符,例如:"eN%{S$u)"
, "h9YI!>4j"
, "{9YI!;4j"
, "eN%{S$usdf)"
, "dfh9YI!>4j"
, "ghffg{9YI!;4j"
.
这个运作良好^.*(?=.{6,})(?=.*\\d).*$"
但在字符串不包含任何数字的情况下(例如"eN%{S$u)"
)它不工作。
^(?=.{6})(.*[^0-9a-zA-Z].*)$
我们使用正向前视来确保至少有 6 个字符。然后我们匹配寻找至少一个非字母数字字符的模式([^0-9a-zA-Z]
). The .*
匹配这个非字母数字字符周围的任意数量的任何字符,但是当我们到达这里时,我们已经检查了我们是否匹配至少 6 个。
^.*(?=.{6,})(?=.*\\d).*$"
是你尝试过的正则表达式。以下是一些建议:
- 您不需要在前瞻中匹配超过 6 个字符。此处仅匹配 6 个并不限制正则表达式的其余部分匹配超过 6 个。
-
\d
匹配一个数字,并且(?=.*\\d)
是其中之一的前瞻。这就是为什么您遇到您提到的字符串问题的原因,例如eN%{S$u)
.
- 即使上面的观点没有错误并且这里的正则表达式是正确的,您也可以将第二个前瞻与
.*
接下来只需使用.*\\d.*
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)