(?=[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}$/
。
添加回答
举报
0/150
提交
取消