正则数量描述
我们都知道手机号的第2位是有要求的,是数字的其中某几个,那我们怎么表示呢???
[] 匹配[]中列举的字符
注意:这几个字符之间不能有空格逗号什么的。
下面的模式规则是说:只要是3 4 5 7 8 其中的任何一个就可以。
前面我们学过的\d\s\w都有它的相反规则,那在方括号里面能不能达到相反的效果呢???可以的:
如果觉得这样不好理解的话,也可以下面这样:
那这样写很累的啊,所以像前面这样只写一个就可以了。
如果第二位是26个小写字母+数字呢???
中横线代表一个区间的范围。
总结如下:
\d == [0-9]
\D == [^0-9]
\w == [a-zA-Z0-9_]
\W == [^a-zA-A0-9_]
我们再来看:手机号的匹配规则,后面写了那么多的\d,那有没有一种可以描述数量的规则呢????
目前手机号的第二位也是有要求的,目前市场上有13*,14*,15*,17*,18*
表示数量
* 匹配前一个字符出现0次或者无限次,即可有可无
下面\d*说的是:*前面的字符也就是\d是可以出现0次或者无限次的,即可有可无的。
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
为什么下面的是匹配的呢???
这个规则只是描述了一位信息,也就是拿后面的字符串1与描述的规则进行匹配,我们发现是匹配了,那这个match方法就已经认定符合匹配了,至于后面是什么就不管了。
再来看下面的:
以\d+[a-z]为例来说一下:有的同学以为:第一位是\d+,第二位是[a-z]里的其中一个,所以认为会不匹配的,但是它不是这样的,这不是这个意思,由于我们给\d后面加了一个描述数量的信息,也就是\d是可以写任意多个的,也就是与下面这样是等价的:
那+号后面的[a-z]到底是第几位信息,它就不确定了,它得先让前面的数够了,直到不匹配了,那开始[a-z]呢。
{m} 匹配前一个字符出现m次
它等价于下面:
{m,} 匹配前一个字符至少出现m次
下面是说3次以上:
下面是说5次以上:
{0,} 可以代表*号的意思也就是等价的意思:
{1,} 可以代表+号的意思也就是等价的意思:
{m,n} 匹配前一个字符出现从m次到n次
{0,1}可以代表?号的意思也就是等价的意思:
再来精细一下手机号的验证规则:
练一练
[a-z0-9][a-z0-9_]{2,14}[a-z0-9]@sina\.com$