密码强度正则表达式

时间:2014-01-07 03:44:04

标签: c# asp.net regex

我正在尝试用我的asp.net项目中的一个简单的RegEx替换我们的密码验证,该项目使用了regularrexpression验证器。

以下是密码限制:

  1. 密码长度最少为6个字符,最多为15个
  2. 至少应该有一个字母(任何情况下)
  3. 至少应有一位数字
  4. 它应该至少有一个特殊字符。
  5. 我在正则表达式中是n00b,这是我要求勺子喂食的唯一问题类型;)

    我尝试了以下正则表达式,但在少数情况下失败了。

    string re1="([a-z])";   // Any Single Word Character (Not Whitespace) 1
    string re2=".*?";       // Non-greedy match on filler
    string re3=".";         // Uninteresting: c
    string re4=".*?";       // Non-greedy match on filler
    string re5=".";         // Uninteresting: c
    string re6=".*?";       // Non-greedy match on filler
    string re7="(.)";       // Any Single Character 1
    string re8="(\\d)";     // Any Single Digit 1
    
    Regex r = new Regex(re1+re2+re3+re4+re5+re6+re7+re8,RegexOptions.IgnoreCase|RegexOptions.Singleline);
    Match m = r.Match(txt)
    

2 个答案:

答案 0 :(得分:2)

使用这样的模式:

^(?=.*[a-z])(?=.*[0-9])(?=.*[...]).{6,15}$

您可以将[...]替换为您要接受的任何字符作为“特殊字符”。

稍微打破一下:

  • 开始(^)和结束($)锚点确保输入中没有前导或尾随字符。这是确保实施最大长度所必需的。
  • .{6,15}位匹配任何字符的6到15个。
  • (?=...)是一个先行者。它确保匹配的位置后面跟着出现的任何模式。

    • .*[a-z]表示任意数量的字符后跟一个拉丁字母。
    • 同样,.*[0-9]匹配任意数量的字符后跟一个十进制数字,.*[...]匹配任意数量的字符,后跟一个“特殊字符”。
  • 总的来说,(?=.*[a-z])(?=.*[0-9])(?=.*[...])的链意味着所有这三种模式必须以任何顺序存在于以下字符串中。

答案 1 :(得分:0)

我也是新手,我发现了一篇关于验证文件名的帖子应该是一样的。

if(preg_match('/^[a-z0-9-_]+$/',$file_name)) 
{
   echo 'good filename';
}   
else
{
   echo ' The file name can only contain "a-z", "0-9", "_", and "-"';
}

检查它是否包含某些字符,您可以使用这些字符来检测密码中的数字和字母。此外,如果我是你,我还会将密码与常见密码列表进行比较,例如"password" "password123"等。