这一定很简单,我希望它以同样的方式运作,但它并没有帮助我。
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]*|[^A-Z])$");
Match match = regex.Match(plainText);
return match.Success;
}
public static void Main()
{
Console.WriteLine(IsValidPassword("shing")); //logs 'True' always
}
}
采取了正则表达式
问题是它始终返回'True',并且我发送给方法的字符串无效。
如果我对正则表达式做错了,请帮帮我。
请在此处播放 - https://dotnetfiddle.net/lEFYGJ
答案 0 :(得分:16)
我建议您创建单独的模式来验证密码:
var input = "P@ssw0rd";
var hasNumber = new Regex(@"[0-9]+");
var hasUpperChar = new Regex(@"[A-Z]+");
var hasMinimum8Chars = new Regex(@".{8,}");
var isValidated = hasNumber.IsMatch(input) && hasUpperChar.IsMatch(input) && hasMinimum8Chars.IsMatch(input);
Console.WriteLine(isValidated);
答案 1 :(得分:6)
正则表达式存在问题
Regex regex = new Regex(@"^(.{0,7}|[^0-9]*|[^A-Z])$");
你申请了字符|
,这意味着或者。
表单维基
| - 选择(也称为交替或集合并)运算符匹配运算符之前的表达式或运算符之后的表达式。例如,abc | def匹配“abc”或“def”。
这意味着在您的正则表达式中,它匹配.{0,7}
部分或[^0-9]*|[^A-Z]
- 这就是为什么它在任何情况下都会返回真实的原因。
您可以使用此正则表达式:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
此正则表达式将强制执行以下规则: •至少一个大写英文字母 •至少一封小写英文字母 •至少一位数 •至少一个特殊角色 •最少8个长度
答案 2 :(得分:1)
我创建了一个简单的方法来验证所有类型的密码。你可以编辑你的限制。请找到下面给出的代码。
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;
}
}
答案 3 :(得分:0)
好的,发现是表达的变化。 @mmdemirbas在这里做了一个很好的解释 -
( # Start of group
(?=.*\d) # must contain at least one digit
(?=.*[A-Z]) # 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)(?=.*[A-Z]).{8,50})
谢谢大家的光临。
在这里工作 - https://dotnetfiddle.net/lEFYGJ
答案 4 :(得分:0)
你可以使用它,
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$
答案 5 :(得分:0)
满足以下条件
^(?!。([A-Za-z0-9])\ 1 {1})(?=。?[AZ])(?=。?[ az])(?=。?[0-9])(?=。?[#?!@ $%^&-])。{8,} $ >
例如:- 它满足以下密码:-Admin @ 123