2009-07-21 117 views
2

下面的正则表达式要求密码有1个数字,1个字符(上限或下限),最小长度为8。但是如果我输入一个特殊的字符,它会返回false。我不想要一个特殊的字符,但我想在这种情况下允许它。我怎样才能改变这个正则表达式来允许一个特殊的字符?允许特殊字符的正则表达式?

Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z])\w{8,}$") 
+0

任何特殊字符?请明确说明。 – mveerman 2009-07-21 14:25:34

回答

6

更改 “\ W” 到 “”应该这样做:

Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$") 

\ W匹配“字”字,这通常不会匹配特殊字符(取决于您的“特殊”和语言你使用的定义)。
。将匹配除换行符以外的任何字符

4
Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$") 
+0

这允许密码中的空格。我怀疑这是不希望的。 – hobodave 2009-07-21 14:29:35

+2

为什么密码中的空格比例如&符号更不理想? – chaos 2009-07-21 14:30:23

+0

好点。但是你可能想要修剪/限制前导空白和尾随空白。 – hobodave 2009-07-21 14:39:05

4

为什么不做3次单独的检查,这样您可以清楚地检查密码是否符合所需参数,但不必维护大型正则表达式?

if (Regex.IsMatch(Password, "\d") && 
    Regex.IsMatch(Password, "\w") && 
    Password.length >= 8) //psuedo-code 

这不会限制任何字符。它会检查密码是否至少有一个单词字符,至少有一个数字,并且至少有8个字符长。

3

Toran,如果你不希望允许空白密码中使用以下命令:

Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z]\S{8,}$") 
相关问题