猿问

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

(?=[a-zA-Z]+)(?=[0-9]+)[a-zA-Z0-9]{3,10}

上面是我写的,但不正确,不知道原因。我理解的是第一个正向预查找出至少一个字母,和第二个正向预查找出至少一个字母。然后最后是[a-zA-Z0-9]{3,10},这大家都懂。不知道哪里错了,是不是我对正向预查的理解不正确?


qq_遁去的一_1
浏览 3102回答 1
1回答

万千封印

?=不同的人叫法不一样,你称之为预查,我更倾向于叫零宽断言,也就是说?=只是匹配一个位置,并不匹配具体的字符,所以是零宽,也就是宽度是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}$/。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答