我目前使用此正则表达式来检查字符串是否符合一些条件.
条件是字符串必须长度在8到15个字符之间.string必须至少包含一个数字.string必须至少包含一个大写字母.string必须至少包含一个小写字母.
(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,15})$
它在很大程度上起作用,但它不允许特殊的角色.任何帮助修改此正则表达式以允许特殊字符非常感谢.
Jus*_*gan 81
这里似乎有很多混乱.我看到到目前为止,答案不正确执行1+编号/ 1 +小写/ 1 +大写规则,这意味着如密码ABC123,123XYZ,或AB*&^#仍然会被接受.防止全小写,全大写或全数字是不够的; 你必须强制执行每个中至少一个的存在.
请尝试以下方法:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,15}$
Run Code Online (Sandbox Code Playgroud)
如果你还想要至少一个特殊字符(这可能是一个好主意),试试这个:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$
Run Code Online (Sandbox Code Playgroud)
将.{8,15}可以更加严格,如果你WISH(例如,你可以改变它\S{8,15}不允许空格),但请记住,这样做会降低你的密码方案的实力.
我测试了这种模式,它按预期工作.在ReFiddle上测试:http://refiddle.com/110
编辑:一个小注释,最简单的方法是使用3个单独的正则表达式和字符串的Length属性.它也更容易阅读和维护,所以如果你有选择那么这样做.但是,如果这是用于标记中的验证规则,那么您可能只使用单个正则表达式.
Nic*_*rey 42
正则表达式是一种比更明显的方式更容易/更好的方法来强制执行简单约束吗?
static bool ValidatePassword( string password )
{
const int MIN_LENGTH = 8 ;
const int MAX_LENGTH = 15 ;
if ( password == null ) throw new ArgumentNullException() ;
bool meetsLengthRequirements = password.Length >= MIN_LENGTH && password.Length <= MAX_LENGTH ;
bool hasUpperCaseLetter = false ;
bool hasLowerCaseLetter = false ;
bool hasDecimalDigit = false ;
if ( meetsLengthRequirements )
{
foreach (char c in password )
{
if ( char.IsUpper(c) ) hasUpperCaseLetter = true ;
else if ( char.IsLower(c) ) hasLowerCaseLetter = true ;
else if ( char.IsDigit(c) ) hasDecimalDigit = true ;
}
}
bool isValid = meetsLengthRequirements
&& hasUpperCaseLetter
&& hasLowerCaseLetter
&& hasDecimalDigit
;
return isValid ;
}
Run Code Online (Sandbox Code Playgroud)
您认为3年后需要修改约束的维护程序员会更容易理解?
小智 10
您可以尝试这种方法:
private bool ValidatePassword(string password, out string ErrorMessage)
{
var input = password;
ErrorMessage = string.Empty;
if (string.IsNullOrWhiteSpace(input))
{
throw new Exception("Password should not be empty");
}
var hasNumber = new Regex(@"[0-9]+");
var hasUpperChar = new Regex(@"[A-Z]+");
var hasMiniMaxChars = new Regex(@".{8,15}");
var hasLowerChar = new Regex(@"[a-z]+");
var hasSymbols = new Regex(@"[!@#$%^&*()_+=\[{\]};:<>|./?,-]");
if (!hasLowerChar.IsMatch(input))
{
ErrorMessage = "Password should contain At least one lower case letter";
return false;
}
else if (!hasUpperChar.IsMatch(input))
{
ErrorMessage = "Password should contain At least one upper case letter";
return false;
}
else if (!hasMiniMaxChars.IsMatch(input))
{
ErrorMessage = "Password should not be less than or greater than 12 characters";
return false;
}
else if (!hasNumber.IsMatch(input))
{
ErrorMessage = "Password should contain At least one numeric value";
return false;
}
else if (!hasSymbols.IsMatch(input))
{
ErrorMessage = "Password should contain At least one special case characters";
return false;
}
else
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
更新上面的贾斯汀回答。如果您想在 MVC 中使用数据注释来使用它,您可以执行以下操作
[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$", ErrorMessage = "Password must be between 6 and 20 characters and contain one uppercase letter, one lowercase letter, one digit and one special character.")]
Run Code Online (Sandbox Code Playgroud)