开发者社区> 问答> 正文

关于js 密码正则表达式:报错

@abian 你好,想跟你请教个问题:又来请教你问题了,近来在做密码系统,关于修改密码人家提出需要复杂度符合:(新密码须符合:密码长度介于7到18位,其中至少包含有大写和小写字母,数字,特殊字符四种中的任意三种组合!)

测试发现我的正则有问题:reg = /^[a-zA-Z]{1,}[0-9]{1,}[^a-zA-Z0-9]{1,}|[a-zA-Z]{1,}[^a-zA-Z0-9]{1,}[0-9]{1,}|[0-9]{1,}[a-zA-Z]{1,}[^a-zA-Z0-9]{1,}|[0-9]{1,}[^a-zA-Z0-9]{1,}[a-zA-Z]{1,}|[^a-zA-Z0-9]{1,}[a-zA-Z]{1,}[0-9]{1,}|[^a-zA-Z0-9]{1,}[0-9]{1,}[a-zA-Z]{1,}$/

这个我用Qwert123  提示不符合     我在后面输Qwert123! 这居然可以,我不知哪里错了什么

展开
收起
kun坤 2020-06-06 13:01:35 519 0
1 条回答
写回答
取消 提交回答
  • 我后来修改,看看文档,现在算是完成此种校验了,但是感觉是笨办法,我的正则太长(reg = /^[A-Z]{0,}[a-z]{1,}[0-9]{1,}[^a-zA-Z0-9]{1,}|[A-Z]{0,}[a-z]{1,}[^a-zA-Z0-9]{1,}[0-9]{1,}|[A-Z]{0,}[0-9]{1,}[a-z]{1,}[^a-zA-Z0-9]{1,}|[A-Z]{0,}[0-9]{1,}[^a-zA-Z0-9]{1,}[a-z]{1,}|[A-Z]{0,}[^a-zA-Z0-9]{1,}[a-z]{1,}[0-9]{1,}|[A-Z]{0,}[^a-zA-Z0-9]{1,}[0-9]{1,}[a-z]{1,}|  
    [a-z]{0,}[A-Z]{1,}[0-9]{1,}[^a-zA-Z0-9]{1,}|[a-z]{0,}[A-Z]{1,}[^a-zA-Z0-9]{1,}[0-9]{1,}|[a-z]{0,}[0-9]{1,}[A-Z]{1,}[^a-zA-Z0-9]{1,}|[a-z]{0,}[0-9]{1,}[^a-zA-Z0-9]{1,}[A-Z]{1,}|[a-z]{0,}[^a-zA-Z0-9]{1,}[0-9]{1,}[A-Z]{1,}|[a-z]{0,}[^a-zA-Z0-9]{1,}[A-Z]{1,}[0-9]{1,}|          
    [0-9]{0,}[A-Z]{1,}[a-z]{1,}[^a-zA-Z0-9]{1,}|[0-9]{0,}[A-Z]{1,}[^a-zA-Z0-9]{1,}[a-z]{1,}|[0-9]{0,}[a-z]{1,}[^a-zA-Z0-9]{1,}[A-Z]{1,}|[0-9]{0,}[a-z]{1,}[A-Z]{1,}[^a-zA-Z0-9]{1,}|[0-9]{0,}[^a-zA-Z0-9]{1,}[a-z]{1,}[A-Z]{1,}|[0-9]{0,}[^a-zA-Z0-9]{1,}[A-Z]{1,}[a-z]{1,}|                         
    [^a-zA-Z0-9]{0,}[A-Z]{1,}[a-z]{1,}[0-9]{1,}|[^a-zA-Z0-9]{0,}[A-Z]{1,}[0-9]{1,}[a-z]{1,}|[^a-zA-Z0-9]{0,}[a-z]{1,}[A-Z]{1,}[0-9]{1,}|[^a-zA-Z0-9]{0,}[a-z]{1,}[0-9]{1,}[A-Z]{1,}|[^a-zA-Z0-9]{0,}[0-9]{1,}[a-z]{1,}[A-Z]{1,}|[^a-zA-Z0-9]{0,}[0-9]{1,}[A-Z]{1,}[a-z]{1,}$/
    )  这种看上去都晕乎了,好在我有耐心,呼呼~~  不知可有什么优化的地方######楼主屌!
    ######为什么一定要用正则呢?或者说为什么一定要用一个正则呢?######

    /^(.{19,}|.{,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) !== null



    换种姿势
    ######

    引用来自“magiclogy”的评论

    /^(.{19,}|.{,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) !== null



    换种姿势
    你这我试过  不行,不满足条件######好吧,应该是===null######

    引用来自“magiclogy”的评论

    /^(.{19,}|.{,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) !== null



    换种姿势

    引用来自“小马奔腾123”的评论

    你这我试过  不行,不满足条件
    哥,你确定试过你这个可以么?我试过是不行的######

    引用来自“magiclogy”的评论

    /^(.{19,}|.{,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) !== null



    换种姿势

    引用来自“小马奔腾123”的评论

    你这我试过  不行,不满足条件

    引用来自“小马奔腾123”的评论

    哥,你确定试过你这个可以么?我试过是不行的

    用的正则种类多了,时常脑抽。

    /^(.{19,}|.{0,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) === null



    ######

    引用来自“magiclogy”的评论

    /^(.{19,}|.{,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) !== null



    换种姿势

    引用来自“小马奔腾123”的评论

    你这我试过  不行,不满足条件

    引用来自“小马奔腾123”的评论

    哥,你确定试过你这个可以么?我试过是不行的

    引用来自“magiclogy”的评论

    用的正则种类多了,时常脑抽。

    /^(.{19,}|.{0,6}|[a-zA-Z]+|[a-z0-9]+|[A-Z0-9]+|[^a-zA-Z]+|[^a-z0-9]+|[^A-Z0-9]+)$/.exec(password) === null



    真不行啊 ######

    1. 首先,我作为用户,觉得这个规则太变态了,我哪记得那么复杂的密码。

    2. 然后,非要用正则表达式吗?用if判断不是更简单,而且代码可读性更好?

    ######同意,多写几个if判断的事情。不然以后代码维护起来要搞死人。######

    引用来自“MyronLee”的评论

    1. 首先,我作为用户,觉得这个规则太变态了,我哪记得那么复杂的密码。

    2. 然后,非要用正则表达式吗?用if判断不是更简单,而且代码可读性更好?

    1 说的好,我也没办法啊,这个修改密码是要存储到LDAP 中去,ldap的密码要求复杂度就是这样,否则修改不会成功的

    2 我刚开始就先想到的是正则,所以在这上面花了时间去研究了下,所以才想要个结果,以后遇到简单一点的就很容易了

    2020-06-08 11:25:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载