我需要Regexp来验证字符串的最小长度为6,并且它至少包含一个非字母数字字符,例如: "eN%{S$u)"
, "h9YI!>4j"
, "{9YI!;4j"
, "eN%{S$usdf)"
, "dfh9YI!>4j"
, "ghffg{9YI!;4j"
。
这个工作得很好 ^.*(?=.{6,})(?=.*\\d).*$"
但是在字符串不包含任何数字的情况下(例如 "eN%{S$u)"
)它无法正常工作。
我需要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]
)。该 .*
在这个非字母数字字符周围匹配任意数量的任何字符,但是当我们到达这里时,我们已经检查过我们匹配至少6个。
^.*(?=.{6,})(?=.*\\d).*$"
是你试过的正则表达式。以下是一些建议:
\d
匹配一个数字,和 (?=.*\\d)
对其中一个人来说是一个先行者。这就是为什么你遇到了你提到的字符串之类的问题 eN%{S$u)
。.*
只需使用即可 .*\\d.*
。marcog的答案非常好,但我会反过来这样做,以便更容易添加更多条件(例如至少有一个数字或其他),并且我会使用惰性量词因为它们更便宜图案:
^(?=.*?[^0-9a-zA-Z]).{6}
因此,如果您要添加上述附加条件,它将是这样的:
^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6}
如您所见,此模式很容易扩展。注意,它仅用于检查匹配,其捕获无用。
保持简单。
// 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]
^(?=.{6})(.*[^0-9a-zA-Z].*)$
我们使用正向前瞻来确保至少有6个字符。然后我们匹配寻找至少一个非字母数字字符的模式([^0-9a-zA-Z]
)。该 .*
在这个非字母数字字符周围匹配任意数量的任何字符,但是当我们到达这里时,我们已经检查过我们匹配至少6个。
^.*(?=.{6,})(?=.*\\d).*$"
是你试过的正则表达式。以下是一些建议:
\d
匹配一个数字,和 (?=.*\\d)
对其中一个人来说是一个先行者。这就是为什么你遇到了你提到的字符串之类的问题 eN%{S$u)
。.*
只需使用即可 .*\\d.*
。marcog的答案非常好,但我会反过来这样做,以便更容易添加更多条件(例如至少有一个数字或其他),并且我会使用惰性量词因为它们更便宜图案:
^(?=.*?[^0-9a-zA-Z]).{6}
因此,如果您要添加上述附加条件,它将是这样的:
^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6}
如您所见,此模式很容易扩展。注意,它仅用于检查匹配,其捕获无用。
保持简单。
// 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]
怎么样(固定): ^(?=.{6})(.*[^\w].*)$
看一下这个 http://www.ultrapico.com/Expresso.htm 它是很酷的工具,可以帮助你在Regexps学习。