为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式,3-10位必须包含至少1个数字和1个字母,为何我这样写不对?

正则表达式,3-10位必须包含至少1个数字和1个字母,为何我这样写不对?

qq_遁去的一_1 2019-02-01 18:23:41
(?=[a-zA-Z]+)(?=[0-9]+)[a-zA-Z0-9]{3,10}上面是我写的,但不正确,不知道原因。我理解的是第一个正向预查找出至少一个字母,和第二个正向预查找出至少一个字母。然后最后是[a-zA-Z0-9]{3,10},这大家都懂。不知道哪里错了,是不是我对正向预查的理解不正确?
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

?=不同的人叫法不一样,你称之为预查,我更倾向于叫零宽断言,也就是说?=只是匹配一个位置,并不匹配具体的字符,所以是零宽,也就是宽度是0。
所以(?=[a-zA-Z]+)匹配一个位置,这个位置后面紧跟至少一个字母,注意此时位置并没有后移;
(?=[0-9]+)也是匹配一个位置,这个位置后面后面紧跟至少一个数字;
因为(?=[a-zA-Z]+)(?=[0-9]+)都只匹配位置,而不匹配具体的字符,这两个又直接写在了一起,也就是说(?=[a-zA-Z]+)(?=[0-9]+)意味着这个位置后面紧跟至少一个字母,同时紧跟至少一个数字,也就是说这个位置后面的字符既是字母又是数字,显然这样的位置不存在。

Update:
你试试这个/^(?=[a-zA-Z]*[0-9])(?=[0-9]*[a-zA-Z])[a-zA-Z0-9]{3,10}$/


查看完整回答
反对 回复 2019-02-02
  • 1 回答
  • 0 关注
  • 3101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信