haoyuan2012 2017-09-15 00:44 采纳率: 0%
浏览 10696
已结题

至少包括字母数字特殊字符中任意2种的正则表达式

/(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{7,20}$/
这个正则表达式规定了必须包括字母数字特殊字符中任意2种组合,这个表达式是从网上找的,经过测试是可以用的,但是看不懂什么意思,请高手给予解析、指点!

  • 写回答

7条回答

  • 我不喜欢这个世界 2017-09-15 04:12
    关注

    我先给你举个例子,比如9Asb123456这个密码段。
    你用第一部分匹配出来的是9
    第二部分匹配了9Asb123456(也就是所有)
    为什么这样能实现呢?
    原因是这样的:
    首先你要求的条件是至少匹配两个不同的字符类型。
    也就是说你的第一部分匹配出的9表示第一种字符数字,
    这时候就证明你的字符串9后面是其他字符
    也就说明了我检查出来9这个数字,就可以确认密码段含有两种类型了,
    (不管9后面有多少种类型,它目前已经至少满足是两种类型了)
    这时候结合你的第二部分匹配,,检查是否位数足够,检查9后面的是否有非法字符类型,比如空格
    就可以证明了9Asb123456是合格的

    还有一个问题?
    如果我把密码段改成123456789
    你的第一部分匹配到的就是123456789整个数字类型,第一部分通过
    第二部分匹配的结果也是123456789,这时候满足了位数,并不满足类型
    所以你还要有个判断,你的第一部分匹配结果得到的长度不能和第二部分匹配结果得到的长度相同。

    评论

报告相同问题?

问题事件

  • 请选择合适的标签 12月14日

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作