使用regex c#validation密码

这必须简单,我希望它以同样的方式工作,但它并没有帮助我。

using System; using System.Text.RegularExpressions; 

我需要password validation regular expression ,在某些条件下 –

1)必须至少包含一个数字

2)一个大写字母

3)长8个字符。

 public class Program { public static bool IsValidPassword(string plainText) { Regex regex = new Regex(@"^(.{0,7}|[^0-9]*|[^AZ])$"); Match match = regex.Match(plainText); return match.Success; } public static void Main() { Console.WriteLine(IsValidPassword("shing")); //logs 'True' always } } 

我从这个来源采取了正则表达式 – 密码必须是8个字符,包括1个大写字母,1个特殊字符,字母数字字符

问题是它总是返回’True’,并且我发送给方法的字符串无效。

如果我正在使用正则表达式做错了,请帮助我。

请在这里玩 – https://dotnetfiddle.net/lEFYGJ

我建议您创建单独的模式来validation密码:

 var input = "P@ssw0rd"; var hasNumber = new Regex(@"[0-9]+"); var hasUpperChar = new Regex(@"[AZ]+"); var hasMinimum8Chars = new Regex(@".{8,}"); var isValidated = hasNumber.IsMatch(input) && hasUpperChar.IsMatch(input) && hasMinimum8Chars.IsMatch(input); Console.WriteLine(isValidated); 

正则表达式存在问题

 Regex regex = new Regex(@"^(.{0,7}|[^0-9]*|[^AZ])$"); 

你应用了角色| 这意味着或者。

形成维基

| – 选择(也称为交替或集合并)运算符匹配运算符之前的表达式或表达式之后的表达式。 例如,abc | def匹配“abc”或“def”。

这意味着在你的正则表达式中它匹配.{0,7} part或[^0-9]*|[^AZ] – 这就是为什么它在任何情况下都返回true。


你可以使用这个正则表达式:

 ^(?=.*?[AZ])(?=.*?[az])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$ 

此正则表达式将强制执行以下规则:•至少一个大写英文字母•至少一个小写英文字母•至少一个数字•至少一个特殊字符•最小长度为8

来自: 密码的正则表达式必须包含至少8个字符,至少1个数字以及大写和小写字母和特殊字符

我创建了一个简单的方法来validation所有类型的密码。 您可以编辑您的限制。 请找到下面给出的代码。

 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(@"[AZ]+"); var hasMiniMaxChars = new Regex(@".{8,15}"); var hasLowerChar = new Regex(@"[az]+"); 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; } } 

好的,发现是表达的变化。 @mmdemirbas在这里做了一个很好的解释 –

密码必须为8个字符,包括1个大写字母,1个特殊字符,字母数字字符

 ( # Start of group (?=.*\d) # must contain at least one digit (?=.*[AZ]) # must contain at least one uppercase character (?=.*\W) # must contain at least one special symbol . # match anything with previous condition checking {8,8} # length at least 8 characters and also maximum of 8 ) # End of group 

我现在的结束表达是 –

 ((?=.*\d)(?=.*[AZ]).{8,50}) 

谢谢大家的光临。

在这里工作 – https://dotnetfiddle.net/lEFYGJ

你可以用这个,

 ^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$