常用正则表达式收集
正则是程序员又爱又恨的一部分了,会用的可以大大提高检验效率,不会用的写一个正则都脑袋疼,所以慢慢积累一些正则方便使用。在写正则之前,一定要先分析清规则,才能写好正则,请大家细细品这句话。
测试用例代码格式
每次只需要修改测试的字符串和正则表达式即可测试
// 测试用例
var strArr = ['1234@qq.com', 'wang@126.com', 'wang123@126.com', 'wang123@vip.163.com', 'wang_email@outlook.com', 'wang__email@outlook.com', 'wang_email_@outlook.com', 'wangemail_@outlook.com','wang_emai.l@outlook.com','wang.email@gmail.com'];
// 正则表达式
var reg = /^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@([A-Za-z0-9-]+.)+[A-Za-z]{2,6}$/;
// 无效的字符串
var aResError = [];
// 遍历校验字符串
var aRes = strArr.map(function (item) {
if (!reg.test(item)) {
var str = item + ' 正则无效';
aResError.push(str);
return str;
}
return item + ' 正则有效';
});
// 全部测试用例结果
console.log('全部测试用例结果: ' , aRes);
// 测试无效用例结果
console.log('测试无效用例结果: ' , aResError);
邮箱正则
邮箱正则:/^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@([A-Za-z0-9-]+.)+[A-Za-z]{2,6}$/
首来看几个合法邮箱的例子:
- 1234@qq.com(纯数字)
- wang@126.com(纯字母)
- wang123@126.com(数字、字母混合)
- wang123@vip.163.com(多级域名)
- wang_email@outlook.com(含下划线
_
) - wang.email@gmail.com(含英语句号
.
)
根据对以上邮箱的观察,可将邮箱分为两部分(“@”左边和右边部分)来进行分析:
- 左边部分可以有数字、字母、下划线(
_
)和英语句号(.
),左侧不能出现连续的_
和.
,且不能在结尾,因此可以表示成:[A-Za-z0-9]+([_.][A-Za-z0-9]+)*
。 - 右边部分是域名,按照域名的规则,可以有数字、字母、短横线(
-
)和英语句号(.
),另外顶级域名一般为 2 ~ 6 个英文字母(比如“cn”、“com”、“site”、“group”、“online”),故可表示为:([A-Za-z0-9-]+.)+[A-Za-z]{2,6}。
要注意两点:
- 考虑到匹配邮箱时字符串的一头一尾不能有其它字符,故要加上开始标志元字符
^
和结束标志元字符$
。 - 英语句号(
.
)是正则表达式的元字符,因此要进行转义(.
)。
手机号正则
手机号正则:/^1[3456789]d{9}$/
手机号由于运营商繁多,基本上都是1开头的11位数字,忽略掉各运营商的细节可以写个大概的正则,如果你要针对各个运营商和各个号段写正则就需要具体的规则了。
身份证号正则
身份证号正则:/^d{15}$)|(^d{17}([0-9]|X)$/
身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
身份证正则合并:
/^d{15}$)|(^d{17}([0-9]|X)$/
数字正则
- 数字:
^[0-9]*$
- n位的数字:
^d{n}$
- 至少n位的数字:
^d{n,}$
- m-n位的数字:
^d{m,n}$
- 零和非零开头的数字:
^(0|[1-9][0-9]*)$
- 非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(.[0-9]{1,2})?$
- 带1-2位小数的正数或负数:
^(-)?d+(.d{1,2})$
- 正数、负数、和小数:
^(-|+)?d+(.d+)?$
- 有两位小数的正实数:
^[0-9]+(.[0-9]{2})?$
- 有1~3位小数的正实数:
^[0-9]+(.[0-9]{1,3})?$
- 非零的正整数:
^[1-9]d*$
或^([1-9][0-9]*){1,3}$
或^+?[1-9][0-9]*$
- 非零的负整数:
^-[1-9][]0-9"*$
或^-[1-9]d*$
- 非负整数:
^d+$
或^[1-9]d*|0$
- 非正整数:
^-[1-9]d*|0$
或^((-d+)|(0+))$
- 非负浮点数:
^d+(.d+)?$
或^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
- 非正浮点数:
^((-d+(.d+)?)|(0+(.0+)?))$
或^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
- 正浮点数:
^[1-9]d*.d*|0.d*[1-9]d*$
或^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
- 负浮点数:
^-([1-9]d*.d*|0.d*[1-9]d*)$
或^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$
- 浮点数:
^(-?d+)(.d+)?$
或^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$
字符正则
- 汉字:
^[u4e00-u9fa5]{0,}$
- 英文和数字:
^[A-Za-z0-9]+$
或^[A-Za-z0-9]{4,40}$
- 长度为3-20的所有字符:
^.{3,20}$
- 由26个英文字母组成的字符串:
^[A-Za-z]+$
- 由26个大写英文字母组成的字符串:
^[A-Z]+$
- 由26个小写英文字母组成的字符串:
^[a-z]+$
- 由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
- 由数字、26个英文字母或者下划线组成的字符串:
^w+$
或^w{3,20}$
- 中文、英文、数字包括下划线:
^[u4E00-u9FA5A-Za-z0-9_]+$
- 中文、英文、数字但不包括下划线等符号:
^[u4E00-u9FA5A-Za-z0-9]+$
或^[u4E00-u9FA5A-Za-z0-9]{2,20}$
- 可以输入含有
^%&',;=?$"
等字符:[^%&',;=?$x22]+
- 禁止输入含有~的字符:
[^~x22]+
特殊需求表达式
- 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
^[a-zA-Z]w{5,17}$
- 日期格式:
^d{4}-d{1,2}-d{1,2}
- 空白行的正则表达式:
s* (可以用来删除空白行)
- HTML标记的正则表达式:
<(S*?)[^>]*>.*?|<.*? />
( 首尾空白字符的正则表达式:^s*|s*$或(^s*)|(s*$
) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
参考:
书写一个用于验证邮箱的正则表达式