使用regex c#验证密码

时间:2016-01-11 06:37:06

标签: c# regex

这一定很简单,我希望它以同样的方式运作,但它并没有帮助我。

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
    }
}

我从这个来源 - Password must be 8 characters including 1 uppercase letter, 1 special character, alphanumeric characters

采取了正则表达式

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

如果我对正则表达式做错了,请帮帮我。

请在此处播放 - https://dotnetfiddle.net/lEFYGJ

6 个答案:

答案 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个长度

来自:Regex for Password Must be contain at least 8 characters, least 1 number and both lower and uppercase letters and special characters

答案 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在这里做了一个很好的解释 -

Password must be 8 characters including 1 uppercase letter, 1 special character, alphanumeric characters

(                   # 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)

满足以下条件

  1. 长度为8的密码
  2. 至少需要1个唯一字符。
  3. 需要1位数字
  4. 需要1个小写字符
  5. 需要1个大写字符
  6. 需要1个特殊字符
  

^(?!。([A-Za-z0-9])\ 1 {1})(?=。?[AZ])(?=。?[ az])(?=。?[0-9])(?=。?[#?!@ $%^&-])。{8,} $

例如:- 它满足以下密码:-Admin @ 123