.NET正则表达式,用于检查长度和非字母数字字符

Reg*_*Reg 11 .net c# regex

我需要正则表达式来验证串具有最小长度6,它是含有至少一个非字母数字字符例如:"eN%{S$u)","h9YI!>4j","{9YI!;4j","eN%{S$usdf)","dfh9YI!>4j","ghffg{9YI!;4j".

这个工作正常,^.*(?=.{6,})(?=.*\\d).*$"但在字符串不包含任何数字的情况下(例如"eN%{S$u)")它不起作用.

mar*_*cog 11

^(?=.{6})(.*[^0-9a-zA-Z].*)$
Run Code Online (Sandbox Code Playgroud)

我们使用正向前瞻来确保至少有6个字符.然后我们匹配寻找至少一个非字母数字字符([^0-9a-zA-Z])的模式.该.*的匹配任意数量的围绕这一非字母数字字符的任意字符,但当时我们已经到达这里,我们已经检查了,我们会等额至少6个.

^.*(?=.{6,})(?=.*\\d).*$"
Run Code Online (Sandbox Code Playgroud)

是你试过的正则表达式.以下是一些建议:

  • 您不需要在前瞻中匹配超过6个字符.这里仅匹配6不会限制正则表达式的其余部分匹配超过6.
  • \d匹配一个数字,并且(?=.*\\d)是其中之一的先行者.这就是为什么你遇到了你提到的字符串之类的问题eN%{S$u).
  • 即使上面的点不正确并且这里的正则表达式是正确的,您也可以.*通过使用将第二个前瞻与后面的前瞻结合起来.*\\d.*.