常用正则表达式

6,016 阅读7分钟

1. 创建 RegExp 对象的语法:

方式1:new RegExp(pattern, attributes);

方式2:/pattern/attributes

参数 说明
pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

1.1 方括号,用于查找某个范围内的字符:

表达式 描述
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
[adgk] 查找给定集合内的任何字符。
[^adgk] 查找给定集合外的任何字符。

1.2 元字符,是拥有特殊含义的字符:

元字符 描述
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配单词边界。
\B 匹配非单词边界。
\0 查找 NUL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

1.3 量词

量词 描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 至 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。

1.4 RegExp 对象方法

方法 描述
compile 编译正则表达式。
exec 检索字符串中指定的值。返回找到的值,并确定其位置。
test 检索字符串中指定的值。返回 true 或 false。

1.5 支持正则表达式的 String 对象的方法

方法 描述
search 检索与正则表达式相匹配的值。
match 找到一个或多个正则表达式的匹配。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。

1.6 正则表达式学习口诀

  • 正则其实也势利,削尖头来把钱揣 (指开始符号^和结尾符号$)

  • 特殊符号认不了,弄个倒杠来引路 (指\. \*等特殊符号)

  • 倒杠后面跟小w, 数字字母来表示 (\w跟数字字母;\d跟数字)

  • 倒杠后面跟小d, 只有数字来表示

  • 倒杠后面跟小a, 报警符号嘀一声

  • 倒杠后面跟小b, 单词分界或退格

  • 倒杠后面跟小t, 制表符号很明了

  • 倒杠后面跟小r, 回车符号知道了

  • 倒杠后面跟小s, 空格符号很重要

  • 小写跟罢跟大写,多得实在不得了

  • 倒杠后面跟大W, 字母数字靠边站

  • 倒杠后面跟大S, 空白也就靠边站

  • 倒杠后面跟大D, 数字从此靠边站

  • 倒框后面跟大B, 不含开头和结尾

  • 单个字符要重复,三个符号来帮忙 (* + ?)

  • 0 星加1 到无穷,问号只管0 和1 (*表0-n;+表1-n;?表0-1次重复)

  • 花括号里学问多,重复操作能力强 ({n} {n,} {n,m})

  • 若要重复字符串,园括把它括起来 ((abc){3} 表示字符串“abc”重复3次 )

  • 特殊集合自定义,中括号来帮你忙

  • 转义符号行不通,一个一个来排队

  • 实在多得排不下,横杠请来帮个忙 ([1-5])

  • 尖头放进中括号,反义定义威力大 ([^a]指除“a”外的任意字符 )

  • 1竖作用可不小,两边正则互替换 (键盘上与“\”是同一个键)

  • 1竖能用很多次,复杂定义很方便

  • 园括号,用途多

  • 反向引用指定组,数字排符对应它 (“\b(\w+)\b\s+\1\b”中的数字“1”引用前面的“(\w+)”)

  • 支持组名自定义,问号加上尖括号 (“(?\w+)”中把“\w+”定义为组,组名为“Word”)

  • 园括号,用途多,位置指定全靠它

  • 问号等号字符串,定位字符串前面 (“\b\w+(?=ing\b)”定位“ing”前面的字符串)

  • 若要定位串后面,中间插个小于号 (“(?<=\bsub)\w+\b”定位“sub”后面的字符串)

  • 问号加个惊叹号,后面跟串字符串

  • PHPer都知道, !是取反的意思

  • 后面不跟这一串,统统符合来报到 (“\wd(?!og)\w”,“dog”不符合,“do”符合)

  • 问号小于惊叹号,后面跟串字符串

  • 前面不放这一串,统统符合来报到

  • 点号星号很贪婪,加个问号不贪婪

  • 加号问号有保底,至少重复一次多

  • 两个问号老规矩,0次1次团团转

  • 花括号后跟个?,贪婪变成不贪婪

  • 还有很多装不下,等着以后来增加。

2. 常用正则表达式

2.1 社交

邮箱

var isMail = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
var isMail = /^([A-Za-z0-9_\-\.\u4e00-\u9fa5])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;

手机号

集号吧:https://www.jihaoba.com/tools/haoduan/

时间截止为:2018年1月11日

移动号段:134 135 136 137 138 139 147 148 150 151 152 157 158 159 172 178 182 183 184 187 188 198
联通号段:130 131 132 145 146 155 156 166 171 175 176 185 186
电信号段:133 149 153 173 174 177 180 181 189 199
虚拟运营商:170

var isMobile = /^(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/;  
var isMobile = /^(0|86|17951)?(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/; 

固定电话

var isTel = /^(\+\d{2}-)?0\d{2,3}-\d{7,8}$/;
var isTel = /(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}/;

QQ号码

var isQQ = /^[1-9][0-9]{4,10}$/;

微信号码

微信号正则,6至20位,以字母开头,字母,数字,减号,下划线

var isWeixin = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;

2.2 字符

字符串为空

var isEmpty = /^\s*$/;

纯中文

var isCn = /^[\u4e00-\u9fa5]+$/;

英文字母

var isEn = /^[a-z]+$/i;

大写英文字母

var isEn = /^[A-Z]+$/;

字母和数字

var isEnAndNum = /^[a-z0-9]+$/i;

英文、数字、下划线

var isStr = /^\w+$/;

用户名

用户名正则,4到16位(字母,数字,下划线,减号)

var isUsername = /^[a-zA-Z0-9_-]{4,16}$/;

密码

密码正则,以字母开头,长度在6~18之间,只能包含字母、数字和下划线

var isPwd =/^[a-zA-Z]\w{5,17}$/;

强密码正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符

var isPwd = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;

特殊字符检测

特殊字符:["'<>%;)(&+]+-!!@#$~

var isSchar = /["'<>%;)(&+]+-!!@#$~/;

2.3 数字

数字

var isNum = /(^-?[0-9]\d*$)/;
var isNum = /^\d+$/;

n个数字

var isNum = /^\d{n}$/;

n个以上数字

var isNum = /^\d{n,}$/;

m至n个数字

var isNum = /^\d{m,n}$/;

2.4 网络

url地址

var isUrl = /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i;

域名

var isDomain = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/;

IP地址

var isIP = /\d+\.\d+\.\d+\.\d+/;

2.5 地理位置

邮政编码

var isMailCode = /[1-9]{1}(\d+){5}/;
var isMailCode = /^[1-9]\d{5}(?!\d)$/;

经纬度

经度正则

var isLong = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/;

纬度正则

var isLat = /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/;

2.6 社会属性

姓名

张三/长·你·三/Name/Name Black 中文名字长度限制在10,英文名字长度限制在10

var name = /(^[\u4e00-\u9fa5]{1}[\u4e00-\u9fa5\.·。]{0,8}[\u4e00-\u9fa5]{1}$)|(^[a-zA-Z]{1}[a-zA-Z\s]{0,8}[a-zA-Z]{1}$)/;

身份证号

第一代身份证只有15位数,第二代身份证有18位数,各位按照需求来选择表达式。

第一、二代身份证

var isIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;

第一代身份证(15位)

var isIdCard = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;

第二代身份证

var isIdCard = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

护照

var isIdCard = /^(P\d{7}|G\d{7,8}|TH\d{7,8}|S\d{7,8}|A\d{7,8}|L\d{7,8}|\d{9}|D\d+|1[4,5]\d{7})$/;

统一社会信用代码

参照标准:
《GB_32100-2015_法人和其他组织统一社会信用代码编码规则.》
按照编码规则:
标准规定统一社会信用代码用18位阿拉伯数字或大写英文字母(不适用I、O、Z、S、V)表示,分别是1位登记管理部门代码、1位机构类别代码、6位登记管理机关行政区划码、9位主体标识码、1位校验码。
第一部分(第1位)为登记管理部门代码,9表示工商部门;(数字或大写英文字母)
第二部分(第2位)为机构类别代码;(数字或大写英文字母)
第三部分(第3-8位)为登记管理机关行政区划码;(数字)
第四部分(第9-17位)为全国组织机构代码;(数字或大写英文字母)
第五部分(第18位)为校验码(数字或大写英文字母)

var isOrgCode = /^([0-9ABCDEFGHJKLMNPQRTUWXY]{2})(\d{6})([0-9ABCDEFGHJKLMNPQRTUWXY]{9})([0-9ABCDEFGHJKLMNPQRTUWXY])$/;
var isOrgCode = /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g

营业执照注册号

var isBusinessRegNo = /(^(?:(?![IOZSV])[\dA-Z]){2}\d{6}(?:(?![IOZSV])[\dA-Z]){10}$)|(^\d{15}$)/;

不动产单元号

var isCode = /^\d{12}[GJZ][ABSXCDEFGHWY]\d{4}[1-9][FLQW]\d{7}[1-9]$/;

组织机构代码

全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成。

var isOrgCode = /[A-Za-z0-9]{8}-[A-Za-z0-9]$/;

车牌号码

var isCar = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;

2.7 日期

匹配yyyy-MM-dd

var isDate = /^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/;

2.8 浏览器navigator.userAgent

从UA判断是否为IE浏览器

var userAgent = /msie (\d+\.\d+)/i;

从UA判断是否为webkit内核

var userAgent = /webkit/i;

从UA判断是否为chrome浏览器

var userAgent = /chrome\/(\d+\.\d+)/i;

从UA判断是否为firefox浏览器

var userAgent = /firefox\/(\d+\.\d+)/i;

从UA判断是否为opera浏览器

var userAgent = /opera(\/| )(\d+(\.\d+)?)(.+?(version\/(\d+(\.\d+)?)))?/i;

从UA判断是否为Safari浏览器

var userAgent = /(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i;

从UA中判断是否为Android系统

var userAgent = /android/i;

从UA中判断是否为iPad

var userAgent = /ipad/i;

从UA中判断是否为iPhone

var userAgent = /iphone/i;

从UA判断是否为Mac OS平台

var userAgent = /macintosh/i;

从UA中判断是否为Windows平台

var userAgent = /windows/i;

从UA中判断是否为移动终端

var userAgent = /(nokia|iphone|android|ipad|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220)/i;