我正在制定一项要求,我必须创建一个强密码。必须满足以下条件:
- > 应该是上限字母,小写字母,数字和特殊字符的组合
我可以为此写一个正则表达式吗?如果是的话怎么样?
答案 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])(?=.*[!@#$%^&+=]).*$