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 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘