一位顾客问我,以防止输入常用的密码的用户,但允许他们只使用字母数字的密码。
你知道正则表达式中内置的使用PasswordStrengthRegularExpression
选项?
编辑 :我知道是很模糊的,那我告诉客户。 该定义是一样的东西
- 不要让相同的字符连续多于3次。(1111,2222等)
- 不要让升序或降序趋势(12345,ABCDE,6543等)
一位顾客问我,以防止输入常用的密码的用户,但允许他们只使用字母数字的密码。
你知道正则表达式中内置的使用PasswordStrengthRegularExpression
选项?
编辑 :我知道是很模糊的,那我告诉客户。 该定义是一样的东西
这是问的方式从一个正则表达式太多。 你可以覆盖重复字符的东西很轻松地:
^(?:(.)(?!\1\1)){6,}$
但要禁止的连续字符运行的唯一方法是枚举所有可能性:
^(?:(?!123|234|345|456|567|678|789).)*$
......循环往复。 我认为你能做的最好的是需要字符类型的复杂混合 - 例如,至少每一个大写字母,小写字母和数字二:
^(?=(?:[^0-9]*[0-9]){2})
(?=(?:[^A-Z]*[A-Z]){2})
(?=(?:[^a-z]*[a-z]){2})
(?:([A-Za-z0-9])(?!\1\1)){6,}$
这将迫使用户是一个小创意。
这个怎么样?
passwordStrengthRegularExpression=" @\"(?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,})"
验证密码符合下列条件:
http://msdn.microsoft.com/en-us/library/system.web.security.membership.passwordstrengthregularexpression.aspx
我不知道,如果一个正则表达式可以处理要求,但功能只可能更容易阅读反正。 像下面的东西,可以消除那些遵循1(字母或数字)的升序或降序模式连续三个相等的字符或连续的三个字符什么。
static bool IsPasswordRelativelyStrong(string input)
{
for (int i = 2; i < input.Length; i++)
{
if (input[i] == input[i - 1] - 1 && input[i - 1] == input[i - 2] - 1)
return false;
else if (input[i] == input[i - 1] + 1 && input[i - 1] == input[i - 2] + 1)
return false;
else if (input[i] == input[i - 1] && input[i - 1] == input[i - 2])
return false;
}
return true;
}
因此,考虑下面的数组
string[] passwords = { "123456", "abcde", "654321", "111223", "11223344" };
只有最后一个通行证。 该功能可以扩展到考虑是否不允许和/或要求非字母数字字符和密码是否必须超过一个最小长度的要求。
可以断言的复杂的最低水平; 例如“至少一个大写字母,一个小写字母,一个数字,最小长度为6个字符,字母数字字符”可以写成
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{6,}$
尝试这个:
passwordStrengthRegularExpression="^\S*([a-zA-Z0-9]{1,10})$"