2011-01-08 41 views
10

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

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

回答

10
^(?=.{6})(.*[^0-9a-zA-Z].*)$ 

我们使用积极的lookahead来确保至少有6个字符。然后我们匹配查找至少一个非字母数字字符([^0-9a-zA-Z])的模式。该.*的匹配任意数量的围绕这一非字母数字字符的任意字符,但我们已经检查我们在这里达成的时间,我们会等额至少6

^.*(?=.{6,})(?=.*\\d).*$" 

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

  • 您不需要在超前视图中匹配超过6个字符。这里只匹配6,不会限制匹配多于6的正则表达式的其余部分。
  • \d匹配一个数字,(?=.*\\d)是其中之一的前瞻。这就是为什么你遇到你提到的问题,如eN%{S$u)
  • 即使上面的点没有错误,并且这里的正则表达式是正确的,也可以将第二个前视图与仅使用.*\\d.*.*组合起来。
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] 
+0

我保持配置文件中的正则表达式,我不能这样做。 – Reg 2011-01-08 07:12:49

+0

此输入失败:`lucero-1` – Lucero 2011-01-08 10:49:18

3

marcog的答案是相当不错的,但我周围做其他的方式,以便更容易增加更多的条件(如具有至少一个数字或其他),我会使用懒惰量词因为他们是特定的模式更便宜:

^(?=.*?[^0-9a-zA-Z]).{6} 

所以,如果你要添加提到的附加条件,这将是这样的:

^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6} 

正如你所看到的,这种模式很容易扩展。请注意,它仅用于检查匹配项,它的捕获无用。

相关问题