上学的时候就是简单的知道有这个东西,网上也一堆,所以自己都没去了解过,写项目的时候也是遇到需要校验的时候就搜一下,然后懂de都懂ctrl+c、ctrl+v,但是对错和这么写的原因一点都不知道,所以浅学习浅记录一下。
正则表达式-元字符:
代码 | 说明 |
\d | 匹配一个数字字符。等价于[0-9] |
\D | 匹配一个非数字字符。等价于[^0-9] |
\w | 匹配一个任意字母数字下划线字符。等价于[A-Za-z0-9_] |
\W | 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]' |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\ | 转义字符,用于匹配特殊字符本身 |
. | 匹配任意字符(除了换行符)。等价于[^\n\r] |
| | 用于指定多个模式的选择 |
[] | 匹配方括号内的任意一个字符。例如[abc]匹配字符”a”、”b”或”c” |
[^ ] | 匹配方括号内字符以外的任意一个字符。例如[^abc]匹配除了字符”a”、”b”或”c”以外的任意字符 |
* | 匹配前面的模式零次或多次 |
+ | 匹配前面的模式一次或多次 |
? | 匹配前面的模式零次或一次 |
{n} | 匹配前面的模式n次 |
{n,} | 匹配前面的模式至少n次 |
{n,m} | 匹配前面的模式至少n次且不超过m次 |
^ | 用于匹配字符串的开头 |
$ | 用于匹配字符串的结尾 |
\b | 用于匹配单词边界。例如’er\b’可以匹配”never”中的’er’,但不能匹配”verb”中的’er’ |
\B | 用于匹配非单词边界。例如’er\b’不可以匹配”never”中的’er’,但能匹配”verb”中的’er’ |
i | 不区分大小写匹配 |
g | 全局匹配 |
m | 多行匹配 |
s | 特殊字符.包含换行符\n |
(pattern) | 匹配pattern并获取这一匹配 |
(?:pattern) | 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符|来组合一个模式的各个部分是很有用。例如industr(?:y|ies)就是一个比industry|industries更简略的表达式。 |
(?=pattern) | 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,Windows(?=95|98|NT|2000)”能匹配Windows2000中的Windows,但不能匹配Windows3.1中的Windows。 |
(?!pattern) | 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如Windows(?!95|98|NT|2000)能匹配Windows3.1中的Windows,但不能匹配Windows2000中的Windows。 |
(?<=pattern) | 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,(?<=95|98|NT|2000)Windows能匹配2000Windows中的Windows,但不能匹配3.1Windows中的Windows。 |
(?<!pattern) | 反向否定预查,与正向否定预查类拟,只是方向相反。例如(?<!95|98|NT|2000)Windows能匹配3.1Windows中的Windows,但不能匹配2000Windows中的Windows。 |
正则表达式常用方法:
代码 | 说明 |
test() | 测试字符串是否匹配模式,返回布尔值 |
exec() | 在字符串中执行匹配,返回匹配结果的详细信息。 |
match() | 在字符串中查找匹配,返回匹配结果的数组。 |
search() | 在字符串中搜索匹配,返回匹配的位置。 |
正则表达式匹配举例:
代码 | 说明 |
[a-z] | 匹配所有的小写字母 |
[A-Z] | 匹配所有的大写字母 |
[a-zA-Z] | 匹配所有的字母 |
[0-9\.\-] | 匹配所有的数字,句号和减号 |
[\f\r\t\n] | 匹配所有的白字符 |
[\\\/\^] | 匹配\、/、^的所有字符 |
常见实例:
一、校验数字
- 正整数:^[1-9]\d*$
- 负整数:^-[1-9]\d*$
- 整数:^\-{0,1}[0-9]{1,}$
- 大于0的数:^([1-9]+)+(\.[0-9]{1,2})?$
- 正浮点数:^\d+(\.\d+)$
- 负浮点数:^\-\d+(\.\d+)$
- 所有数字:^(-)?[0-9]+([.][0-9]{1,})?$
二、特殊要求
1、车牌号正则:/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
2、微信号6至20位,以字母开头,字母,数字,减号,下划线:/^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/
3、密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):/^[a-zA-Z]\w{5,17}$/
4、身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:/ ^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$/
5、国内电话号码(0511-4405222、021-87888822): \d{3}-\d{8}|\d{4}-\d{7}/