正则练习题

284 阅读1分钟

前言:

我个人学习巩固正则的期间,搜集了一些在工作中,出现频率比较高的正则表达式,希望在自己巩固的同时,也能帮到别人。

1. 手机号码

思路:国内的手机号码第一位通常是 数字1开头,第二位,通常是3,4,5,6,7,8,而后面的9位,是数字混合组合的,可以随意搭配,所以我们在考虑的时候,首先考虑第一位和第二位 ,如下:

  1. 国内第一位通常是数字1,[1]
  2. 第二位通常是[3,4,5,6,7,8]
  3. 后面的九位可随意搭配数字,但只能有9位\d{9}

表达式:/^[1][3,4,5,6,7]\d{9}$/

2. 邮箱

以下是常见邮箱的整理

在写邮箱的需求的时候,通常不同需求会对应不同的邮箱,有手机号码,有英文字符例如:

思路: 在匹配邮箱的时候,考虑到邮箱的特点,它有一个@ 有一个. 那我们根据这两个特点,将邮箱分成三部分

  1. @前面的部分为第一部分,可以为数字,可以有英文字符,可以有下划线
  2. @后面的,也就是第二部分,通常这部分可以是英文字符可以是数字,通常最多为6位字符
  3. .后面为第三部分,通常为两位或者三位的英文字符,例如com或.cn

表达式: /^\w+@[\da-z]{2,6}+\.[a-z]{2,3}$/

或者可以根据自己需求把后面具体成需要的内容,比如:.cn、.com、.net

/^\w+@[\da-z]{2,6}+\.[cn|com|net]{2,3}$/

\w:可以为英文、数字或者_

+:限定符加号指出现一次以上

a-z:表示所有小写英文字符

0-9:表示所有数字

{2,4}:表示要求几位字符,这里是 2-4的范围

3. IP

思路:

  1. 首先考虑IP是由4段组成的,中间分别用句点.隔开
  2. IP地址的数值是在0-255之前的任意数字
  3. 先考虑第一段的数值:
  • 如果第一段的前两个数字是25,那么它的第三份数字就是[0-5],也就是0-5之间
  • 如果第一段的第一位数值为2,那么第二顺位就是[0-4],第三位则可以是任意一位数字
  • 如果第一位为01的话,后面两顺位,可以为任意数字\d
  1. {3}将第一段数值,重复三遍
  2. 第四段数值,将第一段的复制过来直接用节课
  3. ?是限定字符代表的是它前面的字符出现0次或者1次

故:表达式为

/^\b((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b$/

4. 域名匹配

DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的域名写在最右边。由多个标号组成的完整域名总共不超过255个字符

/(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*/

5. 身份证号码

身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X

思路:

  1. 第一个要考虑的情况,将15位和18位的全数字写出匹配表达式\d{15} \d{18},用“或”|运算符连接
  2. 考虑18位最后一个可能是X,意味着前17位是数字,最后一位是X,\d{17}X
  3. 在三种情况的开头均加上^尖号,目的是匹配开头为数字的字符,结尾以$美元符进行行尾匹配,要么为数值要么为X

表达式为:

/\b(^\d{15}$)|(^\d{18}$)|(^\d{17}X$)\b/