【问题标题】:Regex expression not working for password validation正则表达式不适用于密码验证
【发布时间】:2016-04-30 01:52:13
【问题描述】:

我正在尝试为具有以下条件的密码开发正则表达式模式 1) 至少 1 个大写字符 2) 至少 3 个小写字符 3) 至少 1 位数字 4) 至少 1 个特殊字符 5) 最小长度应为 8 个字符。 这是我的javascript函数。有人可以帮我表达一下。谢谢

validatePassword : function(password){
        if(this.isEmpty(password))
        {
            return false;
        }
        var regex = /^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$/;
        if(!regex.test(password))
        {
            return false
        }
        return true
    }

【问题讨论】:

  • 为什么具体要求至少3个小写字符?作为开发人员和必须选择与您的特定规则相匹配的密码的用户,您都将其复杂化。参考this answer,在那里你可以找到非常相似的正则表达式(至少1个小写、大写、数字特殊字符和8+的长度)。还有一些简化,你不需要检查空,因为在这种情况下这个正则表达式会失败,你可以使用return regex.text(password)
  • @marko.. 谢谢...帮助了我

标签: javascript regex


【解决方案1】:
/^(?=.*?[A-Z])(?=(?:.*[a-z]){3})(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

这个正则表达式将强制执行这些规则:

• 至少一个大写
• 至少三个小写
• 至少一位
• 至少一个特殊字符
• 长度至少为 8

JSFIDDLE

【讨论】:

  • {2,} 不是至少有 2 个小写字符吗?
  • 对于至少 3 个,应该是 {3,}.. 不是吗?
  • 您想使用.* 而不是.?,因为您希望先行在先行特定匹配之前匹配任意数量的字符。小写匹配应该是(?=(?:.*[a-z]){3})
  • @chan 如果你使用 {3,} 小写验证必须是 4 个字符,你可以在上面的链接中看到结果。
  • @timolawl 感谢您的另一个回答。我更新了代码
猜你喜欢
  • 2011-07-10
  • 2014-10-14
  • 1970-01-01
  • 2011-05-06
  • 2016-10-19
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多