我目前使用此正则表达式来检查字符串是否符合一些条件。
这些条件是:字符串长度必须在8到15个字符之间;字符串中必须包含至少一个数字;字符串中必须包含至少一个大写字母;字符串中必须包含至少一个小写字母。
(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,15})$
它基本上工作良好,但不允许特殊字符。如果需要修改此正则表达式以允许特殊字符,请帮忙修改。谢谢!
我目前使用此正则表达式来检查字符串是否符合一些条件。
这些条件是:字符串长度必须在8到15个字符之间;字符串中必须包含至少一个数字;字符串中必须包含至少一个大写字母;字符串中必须包含至少一个小写字母。
(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,15})$
它基本上工作良好,但不允许特殊字符。如果需要修改此正则表达式以允许特殊字符,请帮忙修改。谢谢!
符合以下标准的密码模式:
^(?!.*([A-Za-z0-9]))(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,15}$
(?!.*([A-Za-z0-9])\1{1})
片段阻止任何连续重复字符,这在您的标准中没有提到,实际上降低了密码的安全性。您还没有强制执行15个字符的最大长度。一个不太重要的细节:{1}
是多余的,所有 .*?
量词符号中的 ?
也是如此。 .*?
可以具有不同于 .*
的含义,但在此上下文中不是这样。 - Justin Morganpublic static class Utility
{
public const int MinimumAllowedPasswordLength = 6;
public const int MaximumAllowedPasswordLength = 32;
public static bool IsPasswordValid(string? password)
{
if (password is null)
return false;
int passwordLength = password.Length;
if (passwordLength < MinimumAllowedPasswordLength || passwordLength > MaximumAllowedPasswordLength)
return false;
bool hasUpperCaseLetter = false;
bool hasLowerCaseLetter = false;
bool hasDecimalDigit = false;
for (int i = 0; i < passwordLength; i++)
{
var charAtIndex = password[i];
if (!hasLowerCaseLetter && char.IsLower(charAtIndex)) hasLowerCaseLetter = true;
else if (!hasUpperCaseLetter && char.IsUpper(charAtIndex)) hasUpperCaseLetter = true;
else if (!hasDecimalDigit && char.IsDigit(charAtIndex)) hasDecimalDigit = true;
if (hasLowerCaseLetter && hasUpperCaseLetter && hasDecimalDigit)
return true;
}
return false;
}
}