正则表达式的简要与实用案例

一、什么是正则表达式

正则表达式(Regular Expression,简称regexp)

  • 是一种描述字符串的语法结构
  • 是一个特定的格式化模式,用于验证各种字符串是否匹配这个特征,劲儿实现高级的文本查找、替换、截取内容等操作

应用:在项目开发中,手机号指定位数的隐藏、数据采集、敏感词的过滤以及表单中的验证等功能,都可以利用正则来实现。

适用领域:在操作系统(Unix、Linux)、编程语言(C、C++、Java、PHP、Python、JavaScript等)。

正则表达式的表现形式:

  • 一种在POSIX规范兼容的正则表达式,用于确保操作系统之间的可移植性。
  • 一种是当Perl(一种编程语言)发展起来后,衍生出来了Perl正则表达式,JavaScript中的正则语法就是基于Perl的。

如何使用正则:在开发中,经常需要根据正则匹配模式完成对指定字符串的搜索和匹配。

  • RegExp对象提供的exec()方法
  • String对象提供的match()方法

二、正则表达式的字符简介

注意:

字符“-”在通常情况下只表示一个普通字符,只有表示字符范围时才作为元字符使用。“-”连字符表示的范围遵循字符编码的顺序,如“a-z”、"z-a"、"a-9"都是不合法的范围。

三、匹配常用案例

1.匹配座机号

var regexp  = /^(0\d{2}-\d{8})|(0\d{3}-\d{7})$/;

var demo    = /^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/;

 2.匹配中文

/^[\u4e00-\u9fa5]{2,4}$/

3.匹配验证表单(注册QQ)

验证QQ号:/^[1-9][0-9]{4,}$/

验证手机号:/^((13[0-9])|(15[^4,\D])|(18[0-9]))\d{8}$/

验证邮箱:/^[\w\-\.]+\@[\w]+\.[\w]{2,4}$/

验证座机号:/^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/

验证用户名:/^[a-zA-Z0-9_-]{3,16}$/

验证密码:/^[\$a-zA-Z0-9_-]{6,18}$/

4.匹配密码强度

区分大小写英文字母:/^([a-z].*[A-Z])|([A-Z].*[a-z])$/   

带有字母和数字: /^([a-z].*[0-9])|([A-Z].*[0-9])|([0-9].*[a-zA-Z])$/   

字母数字中间加有下划线(想要什么中括号中加):/^[A-Za-z0-9]+[_$][A-Za-z0-9]*$/   

5.匹配双字节字符(包括汉字在内):[^\x00-\xff]

注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

6.匹配空白行

\n\s*\r

注:可以用来删除空白行

7.匹配HTML标记

< (\S*?)[^>]*>.*?|< .*? />

8.匹配首尾空白字符:^\s*|\s*$

注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)

9.匹配Email地址

/^[\w\-\.]+\@[\w]+\.[\w]{2,4}$/

注:表单验证时很实用

10.匹配网址URL:[a-zA-z]+://[^\s]*

注:网上流传的版本功能很有限,上面这个基本可以满足需求

11.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):

/^[a-z0-9_-]{3,16}$/

注:表单验证时很实用

12.匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}

注:匹配形式如 0511-4405222 或 021-87888822

13.匹配腾讯QQ号:[^1-9][0-9]{4,10}$

注:最少四位,最多十位

14.验证手机号

/^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$/ 

15.匹配中国邮政编码:[1-9]\d{5}(?!\d)

注:中国邮政编码为6位数字

 16.匹配身份证:\d{15}|\d{18}

注:中国的身份证为15位或18位

17.匹配 ip 地址:\d+\.\d+\.\d+\.\d+

注:提取ip地址时有用

18.匹配密码: /^[a-zA-Z0-9_-]{6,18}/

19.匹配地址:/^[\u4e00-\u9fa5]+[\d|-]+/;

注:有中文 有数字 有横杠-

20.匹配银行卡:/^[1-9][0-9]{18}$/;

21.匹配车牌号:/^[1-9][0-9]{18}$/;

注:省份简称(1位汉字)+发牌机关代号(1位字母)+序号(6位)

22.匹配验证码:/^(\w{4})|(\w{6})$/;

注:四位或六位,有数字有字母

23.匹配ISBN

/^978-[0-9]-[0-9]{4}[-][0-9]{4}-[0-9X]$/;

注:共13位 978为固定 其他十位 第一位为中国的标识7 ,之后是标识出版社的2-6位数字 ,之后是出版社内刊物的流水 最后一位是校验位0-9和X

24.匹配出生年月

/^[0-9]{4}年(([0][1-9])|([1][1-2]))月((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))日$/;

注:XXXX年XX月XX日

25.匹配姓名

/^[\u4e00-\u9fa5]{2,}([·]*[\u4e00-\u9fa5]*)$/;

注:少数民族姓名带有 点

25.匹配Email(邮箱)地址

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

注:例:www.baidu.com