JavaScript正则表达式

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
搜索模式可用于文本搜索和文本替换。


正则表达式修饰符

修饰符 可以在全局搜索中不区分大小写:

修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

正则表达式模式

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

表达式 描述
[abc] 查找方括号之间的任何字符。
[0-9] 查找任何从 0 至 9 的数字。
(x|y) 查找任何以 | 分隔的选项。

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

元字符 描述
\d 查找数字。
\s 查找空白字符。
\b 匹配单词边界。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

量词:

量词 描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。

正则表达式验证

用户名正则

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

1
2
3
4
function isUsername(str) {
var reg = /^[a-zA-Z0-9_-]{4,16}$/;
return reg.test(str);
}

密码正则

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

1
2
3
4
function isPassword(str) {
var reg = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;
return reg.test(str);
}

整数正则

1
2
3
4
5
6
7
8
function isInteger(str) {
var str1 = /^\d+$/; //正整数正则
var str2 = /^-\d+$/; //负整数正则
var str3 = /^-?\d+$/; //整数正则
return reg.test(str1);
return reg.test(str2);
return reg.test(str3);
}

数字正则

数字: 可以是整数也可以是浮点数

1
2
3
4
5
6
7
8
function isNumber(str) {
var str1 = /^\d*\.?\d+$/; //正数正则
var str2 = /^-\d*\.?\d+$/; //负数正则
var str3 = /^-?\d*\.?\d+$/; //数字正则
return reg.test(str1);
return reg.test(str2);
return reg.test(str3);
}

Email正则

1
2
3
4
function isEmail(str) {
var str = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
return reg.test(str);
}

手机号码正则

手机号码: 11位,第一位为1

1
2
3
4
function isPhoneNumber(str) {
var str = /^1[34578]\d{9}$/;
return reg.test(str);
}

身份证号正则

身份证号: 18位数字,最后一位可以是“X”

1
2
3
4
function isId(str) {
var str = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
return reg.test(str);
}

URL正则

1
2
3
4
function isURL(str) {
var str = /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
return reg.test(str);
}

IPv4地址正则

1
2
3
4
function isIPv4(str) {
var str = /^(?:(?: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]?)$/;
return reg.test(str);
}

十六进制颜色正则

1
2
3
4
function isRGBHex(str) {
var str = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;
return reg.test(str);
}

日期正则

1
2
3
4
5
6
7
8
function isDate(str) {
//日期正则,简单判定,未做月份及日期的判定
var str1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
//日期正则,复杂判定
var str2 = var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
return reg.test(str1);
return reg.test(str2);
}

QQ号码正则

QQ: 5至11位数字,开头不能为0

1
2
3
4
function isQQ(str) {
var str = /^[1-9][0-9]{4,10}$/;
return reg.test(str);
}

微信号正则

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

1
2
3
4
function isWechat(str) {
var str = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
return reg.test(str);
}

车牌号正则

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

包含中文正则

1
2
3
4
function isChinese(str) {
var str = /[\u4E00-\u9FA5]/;
return reg.test(str);
}