正则表达式入门及常用规则

使用正则表达式提高写代码的效率

元字符

  1. \b 是正则表达式规定的一个特殊代码,代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。

  2. . 匹配除了换xx以外的任意字符。

  3. *指定前边的内容可以连续重复使用任意次以使整个表达式得到匹配

  4. .*连在一起就意味着任意数量的不包含换行的字符

  5. \d 一位数字(0~9)

  6. - 只匹配它本身——连字符(减号/中横线)

  7. 0\d{2}-\d{8}, 意思是从零开始匹配2个数字加一个横杠再匹配8个数字,例如: 012-12345678

  8. \s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。

  9. \w 匹配字母或数字或下划线或汉字等。

  10. ^匹配你要用来查找的字符串的开头,$匹配结尾。例如:验证一个6~12位的数字,规则是 ^\d{6,12}$

字符转义

使用\来取消元字符的特殊意义。例如 . 和 * ,查找  本身,用   。

重复

----代码 ---- ----说明----
* 重复零次或更多次
- 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n, m} 重复n到m次

字符类

  1. [aeiou]匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)

  2. [0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)

  3. 例如: (?0\d{2}[) -]?\d{8}

这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。意思是:首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

分支条件

用|把不同的规则分隔开,例如:0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

反义

代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
<a[^>]+> 匹配用尖括号括起来的以a开头的字符串

后向引用

代码/语法 说明
捕获 -
(exp) 匹配exp,并捕获文本到自动命名的组里
(? 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 -
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 -
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

常用正则表达式

  1. 校验密码强度

密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在4-20之间。

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{4,20}$

  1. 校验中文

^[\\u4e00-\\u9fa5]{0,}$

  1. 由数字、26个英文字母或下划线组成的字符串

^\\w+$

  1. 校验E-Mail 地址
[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?
  1. 校验身份证号码

15位:

^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$

18位:

^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

  1. 校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

  1. 校验金额, 精确到2位小数

^[0-9]+(.[0-9]{2})?$

  1. 校验手机号

国内 13、15、18开头的手机号

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$

国内最新的手机号,支持166、199开头

^1[3456789]\d{9}$

  1. 提取URL链接

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

  1. 文件路径及扩展名校验

^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$

  1. 提取所有图片

\\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)

  1. 抽取注释

<!--(.*?)-->

  1. 校验是否为正确的网址格式

(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]

// 用法
let s = "https://www.huanggaofang.com";
let rule = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]"
let reg = new RegExp(rule)
console.log(reg.test(s)) // true

校验数字的表达式

  1. 数字:^[0-9]*$

  2. n位的数字:^d{n}$

  3. 至少n位的数字:^d{n,}$

  4. m-n位的数字:^d{m,n}$

  5. 零和非零开头的数字:^(0|[1-9][0-9]*)$

  6. 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

  7. 带1-2位小数的正数或负数:^(-)?d+(.d{1,2})?$

  8. 正数、负数、和小数:^(-|+)?d+(.d+)?$

  9. 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

  10. 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

  11. 非零的正整数:^[1-9]d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$

  12. 非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]d$

  13. 非负整数:^d+$ 或 ^[1-9]d*|0$

  14. 非正整数:^-[1-9]d*|0$ 或 ^((-d+)|(0+))$

  15. 非负浮点数:^d+(.d+)?$ 或 ^[1-9]d.d|0.d[1-9]d|0?.0+|0$

  16. 非正浮点数:^((-d+(.d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]d.d|0.d[1-9]d))|0?.0+|0$

  17. 正浮点数:^[1-9]d.d|0.d[1-9]d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$

  18. 负浮点数:^-([1-9]d.d|0.d[1-9]d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$

  19. 浮点数:^(-?d+)(.d+)?$ 或 ^-?([1-9]d.d|0.d[1-9]d|0?.0+|0)$

校验字符的表达式

  1. 汉字:^[\u4e00-\u9fa5]{0,}$

  2. 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

  3. 长度为3-20的所有字符:^.{3,20}$

  4. 由26个英文字母组成的字符串:^[A-Za-z]+$

  5. 由26个大写英文字母组成的字符串:^[A-Z]+$

  6. 由26个小写英文字母组成的字符串:^[a-z]+$

  7. 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

  8. 由数字、26个英文字母或者下划线组成的字符串:^w+$ 或 ^w{3,20}$

  9. 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

  10. 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

  11. 可以输入含有^%&',;=?$"等字符:[^%&',;=?$\x22]+

  12. 禁止输入含有~的字符:[^~\x22]+

特殊需求表达式

  1. Email地址:^w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*$

  2. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

  3. InternetURL:[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$

  4. 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$

  5. 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((d{3,4}-)|d{3.4}-)?d{7,8}$

  6. 国内电话号码(0511-4405222、021-87888822):d{3}-d{8}|d{4}-d{7}

  7. 身份证号(15位、18位数字):^d{15}|d{18}$

  8. 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

  9. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  10. 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]w{5,17}$

  11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.d)(?=.[a-z])(?=.*[A-Z]).{8,10}$

  12. 日期格式:^d{4}-d{1,2}-d{1,2}

  13. 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

  14. 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

钱的输入格式:

  1. 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

  2. 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$

  3. 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

  4. 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$

  5. 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$

  6. 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

  7. 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

  8. 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选("+"可以用""替代),而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3}))(.[0-9]{1,2})?$

  9. xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+.[x|X][m|M][l|L]$

  10. 中文字符的正则表达式:[\u4e00-\u9fa5]

  11. 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

  12. 空白行的正则表达式: s* (可以用来删除空白行)

  13. 简单的HTML标记的正则表达式:<(S?)[^>]>.?</>|<.? />

  14. 首尾空白字符的正则表达式:^s|s$或(^s)|(s$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

  15. 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

  16. 中国邮政编码:[1-9]d{5}(?!d) (中国邮政编码为6位数字)

  17. IP地址:d+.d+.d+.d+ (提取IP地址时有用)

  18. IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d).){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

猜你喜欢

转载自www.cnblogs.com/unclefang/p/10408041.html