常用正则表达式

表达式在线检测: http://regexper.com/

  • ^ 开始
  • $ 结尾
  • . 匹配除 \n\r 之外的任何单个字符
  • * 匹配任意次:0、1、N次
  • + 匹配至少一次
  • ? 匹配0次或1次
  • | 或匹配,如:x|y,匹配x或y
  • {n} 匹配n次
  • {n,} 至少匹配n次
  • {n,m} 匹配n-m次
  • [] 字符集合,如:[xyz],匹配x或y或z
  • () 括号内容分为一组
  • ?! 匹配不以某字符
  • \d 数字,等价于 [0-9]
  • \D 非数字,等价于 [^0-9]
  • \s 不可见字符:空格、制表符、换页符,等价于 [\f\n\r\t\v]
  • \S 可见字符
  • \t 制表符
  • \w 包括下划线的单词字符,类似 [A-Za-z0-9_]
  • \W 非单词字符
  • ``
  • ``
  • ``

手机号码

  • /^1[3|4|5|6|7|8|9]\d{9}$/
  • /^1\d{10}$/

邮箱地址

  • /^.+@.+(\..+)+$/
  • /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  • /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i
  • ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

https://tools.ietf.org/html/rfc2822#section-3.4.1

1
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
1
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
1
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

邮政编码

  • /^[1-9]\d{5}$/

身份证

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

区域验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var idCardArea = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '北京', '天津', '河北', '山西', '内蒙古', 0, 0, 0, 0, 0, '辽宁', '吉林', '黑龙江', 0, 0, 0, 0, 0, 0, 0, '上海', '江苏', '浙江', '安微', '福建', '江西', '山东', 0, 0, 0, '河南', '湖北', '湖南', '广东', '广西', '海南', 0, 0, 0, '重庆', '四川', '贵州', '云南', '西藏', 0, 0, 0, 0, 0, 0, '陕西', '甘肃', '青海', '宁夏', '新疆', 0, 0, 0, 0, 0, '台湾', 0, 0, 0, 0, 0, 0, 0, 0, 0, '香港', '澳门', 0, 0, 0, 0, 0, 0, 0, 0, '国外']
// 18位身份证最后一位检验码校验:
var idCardValid1 = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
// 18位身份证最后一位检验码校验:
var idCardValid2 = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
// 省份
var province = parseInt(value.substr(0, 2), 10);
// 城市
var city = parseInt(value.substr(2, 2), 10);
// 县、区
var area = parseInt(value.substr(4, 2), 10);
var year, month, day;
if (idCardArea[province] != void 0 && idCardArea[province] != 0) {
// 1985身份证
if (value.length == 15) {
// 1-6:地区代码
// 7-12:出生年(后两位)月日
// 13~15:顺序号,奇数为男,偶数为女,如当天第一个出生的男孩为01,第二个出生的则为03
year = parseInt('19' + value.substr(6, 2), 10);
month = parseInt(value.substr(8, 2), 10) - 1;
day = parseInt(value.substr(10, 2), 10);
} else if (value.length == 18) {
// 1999身份证
// 1-6:地区代码
// 7-14:出生年(四位)月日
// 15~17:顺序号
// 18:效验位
year = parseInt(value.substr(6, 4), 10);
month = parseInt(value.substr(10, 2), 10) - 1;
day = parseInt(value.substr(12, 2), 10);
var sum = 0;
for (var k = 0; k < 17; k++) {
sum += parseInt(value[k], 10) * idCardValid1[k];
}
var mod = sum % 11;
if (mod == 2) {
isval = value[17] == 'x' || value[17] == 'X';
} else {
isval = value[17] == idCardValid2[9][mod];
}
}
var thedate = new Date(year, month, day);
if (thedate.getFullYear() != year || thedate.getMonth() != month || thedate.getDate() != day) {
isval = false;
}
}

匹配中文

  • \u4E00-\u9FFF