正则表达式学习

正则表达式是一个帮助处理和匹配复杂字符串的工具,regular expression(RegEx)

特点:

  1. 灵活,逻辑性和功能性非常强
  2. 可以迅速用极简单的方式做到字符串的复杂控制
  3. 对初学者不友好,比较晦涩难懂

常见用法:

  1. 邮箱验证
  2. 密码强度验证
  3. 身份证号验证
  4. 用户名验证
  5. 提取数字

字符集合[]

集合set是一对方括号[]内的一组字符,用来代表整个字符中的任意一个 例如:

[abc]        指定字符(a,b或c)之一 [a-z]       表示任何一个小写字母 [^abc]       ^ 表示否的意思,表达了除a,b,c外的任意字符 [0246]       代表 0,2,4,6的任意一个 [0-9]       代表 0到9的任意一个数字 [a-zA-Z]       任何一个大小写字母 [+]        在集合中 +、*、|、()、$、{}都没有特殊含义,仅代表普通字符匹配 [0-9]+        这里的加代表连续多个

常见通配符(核心)

通配符是一种特殊字符,一般指的是反斜杠\后面紧跟的一些特殊标识符,用来指代某些字符集合

  • \d       代表阿拉伯数字(只能匹配一个字符)
  • \D       代表除了阿拉伯数字外的所有字符,可以理解为[^\d]
  • \s       空白字符
  • \S       除空白字符外的所有字符
  • \w       任何单词字符(字母、数字、汉字、下划线_字符)
  • \W       返回一个匹配项,其中字符串不包含任何单词字符 不常用:
  • \A       字符串的开头
  • \Z       字符串的末尾
  • \b       返回指定字符位于单词的开头或者末尾的匹配项
  • \B       不在单词的开头和结尾处

元字符(复杂重要)

在正则表达式中具有特殊含义的字符,具有很高的优先级。例如[]\+都是元字符 在元字符中\的优先级最高,其次为各种括号

  • \ 代表对随后的通配符进行转义,因此需要用\\表示\本身

若反斜杠后面没有通配符,则反斜杠原样输出,就不再转义

  • [] 用于限定字符集合

注意:使用[]时,再[]中间的特殊字符如.+?*:-等等都是看作普通字符,但若要将\[]看作普通字符,需要进行转义,即使用\\表示\,使用\[来表示[

 [\w,]+
 //代表检索所有连续的单词字符或者连续的,  []中只能匹配一个字符
  • . 英文的小数点,表示除换行符之外的任何一个字符

  • * 代表前面的字符可以出现0次或多次

  • + 代表一个或多个连续匹配的字符

  • ? 非贪婪模式,表示匹配前面的字符0次或一次

  • +? 将搜索模式从贪婪模式改为非贪婪模式

    如果能匹配到,则匹配一个,不会匹配多个

  • {} 表示的是前面表达式的确切的出现次数

    \d{2} 表示 匹配两个数字 \d{2,4} 表示 匹配2-4个数字,2,3,4个 \d{2,} 表示2位到无限位

  • | 管道符 代表选择其中一个,一般按顺序选择,若前面的已被匹配,就不会匹配后面的

  • () 捕获和分组

    括号内的字符串将会作为捕获的结果进行输出,只会输出括号内的匹配字符串

  • ^ 代表字符串的开始

  •  代表字符串的结束

  • ?: 表示非捕获分组,匹配冒号后的内容抄但不获取匹配结果,不进行存储供以后使用。

使用捕获组

let str = "abcc123dd1hg";
const regex = /(\d+)([a-zA-Z]+)/g
regex.exec(str);
console.log(`${RegExp.$1}----${RegExp.$2}---${RegExp.$0}`); //获取捕获组中捕获的内容
//123----dd---undefined

密码强度验证

使用正则表达式来进行密码强度验证,一般密码由数字、字母和特殊字符组成,若由一连串的数字或字母或特殊字符,这种密码的安全性不高,而由其中两种组成密码强度一般,用户密码包含的字符种类越多,密码的安全性越高

  1. 只有数字验证(安全性较低)(六位以上的数字密码)
\d{6,}
  1. 只有字母验证(六位以上的字母密码)
[a-zA-Z]{6,}
  1. 只有特殊字符的密码(六位以上的特殊字符密码)
[.-+?\\\[\]`/;'@#$%^&*():<>=~]{6,}

注意:在集合中写[]和\时需要进行转义,因为这两个时元字符,优先级较[]来说更高

解释:

​ [\da-zA-Z]*   表示匹配空字符串,或长度至少为1的由数字和字母组成的字符串 ​ \d+[a-zA-Z]+  表示1个或多个连续数字和1个或多个连续字母组成的字符串 ​ 连起来就可以匹配一系列数字和字母组成的字符串

  1. 数字与字母混合使用密码
  [\da-zA-Z]*\d+[a-zA-Z]+[\da-zA-Z]*
  1. 数字和特殊字符串混合使用
[\d.-+?\\\[\]`/;'@#$%^&*():<>=~]*\d+[.-+?\\\[\]`/;'@#$%^&*():<>=~]+[\d.-+?\\\[\]`/;'@#$%^&*():<>=~]*
  1. 三种字符混合使用(密码强度比较高)
[\da-zA-Z.-+?\\\[\]`/;'@#$%^&*():<>=~]*  #0个或多个数字、字母和特殊字符的混合字符串
((\d+[a-zA-Z]+[.-+?\\\[\]`/;'@#$%^&*():<>=~]+)|  #数字开头
 (\d+[.-+?\\\[\]`/;'@#$%^&*():<>=~]+[a-zA-Z]+)| #数字开头
 ([a-zA-Z]+\d+[.-+?\\\[\]`/;'@#$%^&*():<>=~]+)| #字母开头
 ([a-zA-Z]+[.-+?\\\[\]`/;'@#$%^&*():<>=~]+\d+)| #字母开头
 ([.-+?\\\[\]`/;'@#$%^&*():<>=~]+\d+[a-zA-Z]+)| #特殊字符开头
 ([.-+?\\\[\]`/;'@#$%^&*():<>=~]+[a-zA-Z]+\d+)| #特殊字符开头
)[\da-zA-Z.-+?\\\[\]`/;'@#$%^&*():<>=~]* 

邮箱验证

一般邮箱在@前面会是数字和字母的混合,在其中间可能会混有_-.+,在@后面可能会带有字母和数字然后.加上顶级域名或者会有两个域名

^[\da-zA-Z.-_+]+@[\da-zA-Z_.-+]+[.][\da-zA-Z]{2,4}$

注意:想表示字符.时一定要加上[.],因为普通的.代表的是任意字符,而[.]代表的是字符.

身份证号验证

身份证号由六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码组成

  1. 地址码规则 以数字1-9开始,剩下的5位数字为0-9
   [1-9]\d{5}
  1. 年份码规则 年份码为4位,按现实情况来说现在只有18、19、20开头的
(18|19|20)\d{2}
  1. 月份码规则 由两位数字组成,第一位若为0,则第二位是1-9;第一位若为1,则第二位为0、1或2 (0[1-9])|(1[0-2])
  2. 日期码规则 若第一位取1-2,第二位可以取0-9;若第一位取0,则第二位取1-9,若第一位取3,则第二位可以取0-1
([1-2][0-9])|(0[1-9])|(3[0-1])
  1. 顺序码规则 顺序码为三位
\d{3}
  1. 校验码规则 校验码长一位,可以是数字可以是X或者x
[\dXx]
  1. 总结
^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([1-2][0-9])|(0[1-9])|(3[0-1]))\d{3}[\dXx]$

去掉头尾空白字符

reg = /^\s+|\s+$/g;
posted @ 2021-07-18 20:23  汝染  阅读(85)  评论(0编辑  收藏  举报