一、正则表达式的基本语法和规则
1.备选字符集:无论备选字符集包含多少字符, 必须-只能选1个
例如:
6位数字的密码
[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]
简化:可用-表示范围的区间: [0-9][0-9][0-9][0-9][0-9][0-9]
(1) [0-9]: 0~9其中一个
(2) [a-z]:1位小写字母
(3) [A-Z]:1位大写字母
(4) [A-Za-z]:1位字母,大小写都行
(5) [0-9a-zA-Z]:1位字母或数字都行
(6) [^不能选的字符列表]:反选
例如:[^7] 不能选择7
2. 预定义字符集:为常用的字符集专门提供的简化写法!
(1) \d == [0-9]:1位数字
(2) \w == [0-9a-zA-Z_]:1位字母,数字或_
(3) \s:1位空字符,匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
(4) . : 除换行回车外的任何一个字符,如: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个
任意字符和一个数字;
(5) \t:匹配一个制表符
3.预定义字符的反义:预定义字符的大写形式都是小写的反义
(1) \D:1位非数字字符
(2) \S:匹配任何非空白字符。等价于 [^\f\n\r\t\v]
(3) \v:匹配一个垂直制表符
(4) \n:匹配一个换行符
(5) \r:匹配一个回车符
4. 数量词:规定相邻的字符集可出现的次数
确定数量:3种
(1) {n}:必须反复出现n位
(2) {n,m}:最少出现n次,最多出现m次
(3) {n,}:至少出现n次,多了不限
案例:
①:/^\d{6}$/:6位数字
②:手机号规则:
第1位:只能是1
第2位:[34578]
第3位之后,必须是9位数字
手机号:/^1[34578]\d{9}$/
不确定数量:3种:
(4) *: 有没有都行,次数不限,相当于{0,}
(5) +:至少1次,重复次数不限,相当于{1,}
(6) ?:有没有都行,最多1次,相当于{0,1}
(7) ():分组
案例:
身份证号逻辑:
前15位数字
16,17位必须是数字
最后一位可以是数字或X x
后三位 可有可无,如果有,只能出现一次
\d{15}(\d\d[0-9Xx])?
(8) |:左右两正则表达式选其一
案例:
手机号:
手机号前可能出现+86或0086。
前缀可有可无,且只能出现一次
前缀和手机号之间可以有或没有任意个空字符
第1位:只能是1
第2位:[34578]
第3位之后,必须是9位数字
手机号:
(\+86|0086)?\s*1[34578]\d{9}
5. 指定匹配位置:
(1) ^表达式:必须以表达式开头
案例:
比如:选择字符串开头的空格?^\s*
(2) 表达式$: 必须以表达式结尾
选择结尾空格?\s*$
选择开头或结尾的空格?^\s*|\s*$
(3)*预告:今后只要在程序中执行验证:都要前加^后加$*
比如:
^\d{6}$——从头到尾必须只能是6位数字
1234567
6.预判: 在正式匹配正则表达式之前,先预读整个字符串,进行初步匹配,如果预判都未通过,则不再验证!
(1) (?=表达式): 先浏览字符串是否满足表达式的要求
案例:
比如:2位数字,但不能包含4和7 (?=[^47]$)
(2) (?!表达式):先检查字符串是否不满足表达式要求
案例:
比如:不能都由小写字母和数字组成: (?![a-z0-9]+$)
7.特殊字符
(1) $:匹配输入字符串的结尾位置。
(2) (): 标记一个子表达式的开始和结束位置。
(3) *:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
(4) +:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
(5) .: 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \.。
(6) [: 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
(7) ?: 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
(8) \:将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "(".
(9) ^: 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
(10) {: 标记限定符表达式的开始。要匹配 {,请使用 \{。
(11) |: 指明两项之间的一个选择。要匹配 |,请使用 \|。