当前位置:  开发笔记 > 编程语言 > 正文

使用regex c#验证密码

如何解决《使用regexc#验证密码》经验,为你挑选了2个好方法。

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

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

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

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

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

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



1> tdat00..:

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

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);


我不明白当这个解决方案如此简洁易读时,人们试图把所有这些都推到一个怪物正则表达式中.这绝对是去imo的方式.
@stribizhev:如果写得正确,则为*.1个月后,您将忘记您编写的大部分代码.理解凌乱的正则表达式比使用更简单的代码需要花费大量时间.

2> Pranay Rana..:

正则表达式有问题

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

你应用的字符|意味着或者.

形成维基

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

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


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

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

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

从refered:正则表达式对密码必须含有至少8个字符,至少1号和较低和大写字母和特殊字符


我强烈要求使用此代码的任何人将此正则表达式重构为几个更简单的正则表达式,每个正则表达式对应一个或至少更少的业务规则.一个"大"(是的,我知道有更大的)正则表达式,这是一个理解,维护和调整的噩梦.如果你还没有任何覆盖自动测试,那么它最终会成为那些"禁止"让每个人都接触的LoC之一,因为"它可能会破坏".
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有