4

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

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

4

5 回答 5

6

例如,要验证至少 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))
于 2012-09-21T19:48:05.673 回答
2

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

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

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

于 2012-09-21T19:42:56.363 回答
1

如果您使用 FormsAuthentication,请passwordStrengthRegularExpression在配置提供程序时尝试使用该属性。

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

于 2012-09-21T19:43:09.983 回答
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,"[!@#\$%\^&\*\(\)]"))
于 2012-09-21T19:50:38.353 回答
1

您可以为此编写正则表达式,几乎可以编写任何内容。

我相信这会成功:

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

我在我的项目中使用了它,但添加了我强烈建议的长度要求,如下所示:

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

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

于 2012-09-21T20:03:05.590 回答