我可以编写正则表达式来检查某些条件的密码吗?

时间:2012-09-21 19:39:29

标签: c# .net regex validation passwords

我正在制定一项要求,我必须创建一个强密码。必须满足以下条件:
- > 应该是上限字母,小写字母,数字和特殊字符的组合

我可以为此写一个正则表达式吗?如果是的话怎么样?

5 个答案:

答案 0 :(得分:5)

例如,要验证至少8个字符的密码:

if (Regex.IsMatch(subjectString, 
    @"^               # Start of string
    (?=.*\p{Lu})      # Assert at least one uppercase letter
    (?=.*\p{Ll})      # Assert at least one lowercase letter
    (?=.*\d)          # Assert at least one digit
    (?=.*[^\p{L}\d])  # Assert at least one other character
    .{8,}             # Match at least 8 characters
    $                 # End of string",             
    RegexOptions.IgnorePatternWhitespace))

答案 1 :(得分:2)

不是真的。正则表达式用于搜索/解析字符串,而不是生成字符串。是否有可能以某种方式利用它们,但代码的根目录不能(或者至少不应该)依赖于正则表达式。

正则表达式可用于验证特定密码是否满足某些要求(即询问已生成的密码是否很强)。因此,一种可能的策略是生成随机密码并继续尝试,直到一个验证为强。这将是非常坏主意。你编写生成算法要好得多,以便它始终生成一个强密码。

如果您的问题是是否可以使用正则表达式来验证用户生成的密码,那么请相应地更改问题,因为如果是这种情况则答案为“是”。

答案 2 :(得分:1)

如果您使用的是FormsAuthentication,请在配置提供商时尝试使用passwordStrengthRegularExpression属性。

http://msdn.microsoft.com/en-us/library/ms998347.aspx#paght000022%5Fsqlmembershipproviderconfig

答案 3 :(得分:1)

是。使用System.Text.RegularExpressions.Regex.IsMatch(string input,string pattern)方法。

if( Regex.IsMatch(pw,"[a-z]") &&
    Regex.IsMatch(pw,"[A-Z]") &&
    Regex.IsMatch(pw,"[0-9]") && 
    Regex.IsMatch(pw,"[!@#\$%\^&\*\(\)]"))

答案 4 :(得分:1)

你可以为此写一个正则表达式,几乎任何东西。

我相信这会解决问题:

^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$

我在我的项目中使用了这个,但是增加了一个长度要求,我强烈建议,如下:

^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$

http://www.regular-expressions.info/reference.html