C# 2个字母的正则表达式&;6号
我有一个密码规则要遵循,要求密码必须包含2个字母(大写或小写)和6个数字,整个长度预计等于8个符号 以下是应通过的样本:C# 2个字母的正则表达式&;6号,c#,regex,C#,Regex,我有一个密码规则要遵循,要求密码必须包含2个字母(大写或小写)和6个数字,整个长度预计等于8个符号 以下是应通过的样本: a123456b 1a2b3456 aa123456 123ab456 以及不合格的样品: 1abcdefg2 a1234567b abcdefgh 12345678 我需要一个正则表达式来适应这个规则。编辑:TL;DR:Regex不是完成这项工作的工具,也不需要完成这项工作 Regex不是问题的解决方案,而且恐怕用它来解决问题是不可能的。(但别相信我的话,我敢打赌有人写
a123456b
1a2b3456
aa123456
123ab456
以及不合格的样品:
1abcdefg2
a1234567b
abcdefgh
12345678
我需要一个正则表达式来适应这个规则。编辑:TL;DR:Regex不是完成这项工作的工具,也不需要完成这项工作 Regex不是问题的解决方案,而且恐怕用它来解决问题是不可能的。(但别相信我的话,我敢打赌有人写了一些对深奥的正则表达式引擎的时髦的扩展,就是这样做的) 如果可能,解决方案将无法读取。最好只是检查一下测试结果 大致如下(实际上还没有编译): 注释: 正则表达式是(是?)用于根据模式检查字符串的工具。模式越简单,就越容易为其编写正则表达式。 由于您希望您的密码在字符串中的任何位置都有一个集合的2个字符,而在字符串中的任何位置都有另一个集合的6个字符,因此很难(甚至不可能)创建这样的模式 如果您的问题是“我希望密码以2位数字开头,以6个字母结尾”,那么答案将是微不足道的,但由于数字和字母可以分开,并且可以在字符串中的任何位置,因此答案就不那么微不足道了
而且,大多数情况下,强制使用密码模式并不会提高安全性。如果你必须做任何事情,强制执行一个合理的最小长度并停在那里。实际上,有一个很好的方法可以做到这一点:
public static bool CheckPasswordRule(string password)
{
var isRuleAdhered = (Regex.Matches(password, "\\d").Count == 6 && Regex.Matches(password, "[a-z]").Count == 2);
return isRuleAdhered;
}
如果您仍然不希望连续使用6位数字,可以将代码修改为:
public static bool CheckPasswordRule(string password)
{
var isRuleAdhered= false;
isRuleAdhered = Regex.Matches(password, "\\d").Count == 6 && Regex.Matches(password, "[a-z]").Count == 2 && !Regex.IsMatch(password, "\\d{6}");
return isRuleAdhered;
}
正则表达式方法可以是多个,这里有2个:1)要求长度为8个字符,具有类似于
(?=.{8}$)
的前瞻性,并使用消费模式,允许在一个字母前两次输入零个或多个数字,然后匹配零个或多个字母,2)匹配8个字母或数字,但使用前瞻性限制匹配2个字母
例1:
^(?=.{8}$)(?:\d*[a-z]){2}\d*$
详情:
-字符串的开头^
-长度应仅为8个非换行符(?=.{8}$)
-2个0+位数的序列,后跟1个字母(?:\d*[a-z]){2}
-0+位\d*
-字符串结束$
^(?=(?:\d*[a-z]){2}\d*$)[\da-z]{8}$
详情:
-字符串的开头^
-必须有两个0+数字序列,一个字母后跟0+数字,直到字符串末尾(?=(?:\d*[a-z]){2}\d*$)
-8位数字或字母[\da-z]{8}
-字符串结束$
注意要启用不区分大小写模式,您可以使用
(?i)
/RegexOptions.IgnoreCase
标志预先添加模式,如果您只需要匹配ASCII数字,请使用RegexOptions.ECMAScript
或将\d
替换为[0-9]
你到底在问什么?我需要一个正则表达式来验证密码为什么a1234567b
的密码样本不正确。它包含2个字母和6个数字执行这样的规则通常对安全性有害。它常常迫使人们选择一个新的密码,然后他们必须写下来记住。最好显示一个“强度”分数,让用户选择他们想要的。@DeepakSharma看起来他想要的正好是6位数字和2个字母,好像他想要强制长度为8,是的,有很多方法可以满足要求,我需要正则表达式的原因是,如果规则在某一天发生变化,我会尝试提供灵活的正则表达式。如果需要灵活的正则表达式来计算数字和字母,可以使用变量并相应地替换6和2。对于其他规则,您需要更改正则表达式或添加另一个正则表达式。非常感谢!
^(?=(?:\d*[a-z]){2}\d*$)[\da-z]{8}$