时间:2021-05-02
目录
目前收集整理了21个常用的javaScript正则表达式,其中包括用户名、密码强度、整数、数字、电子邮件地址(Email)、手机号码、身份证号、URL地址、 IP地址、 十六进制颜色、 日期、 微信号、车牌号、中文正则等。表单验证处理必备,赶紧收藏吧!
还会陆续加入新的正则进来,大家多提宝贵意见!
2.1.1 基本用户名正则
在做用户注册时,都会用到用户名正则校验。
定义基本用户名命名规则如下:
2.1.2 中文用户名正则
如果规则中加入允许中文用户名,则变更正则表达式如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var pattern = /^[a-zA-Z\u4E00-\u9FA5][a-zA-Z0-9\u4E00-\u9FA5_-]{3,15}$/; //输出 true console.log("ifat3 : "+pattern.test('ifat3')); //输出 true console.log("Ifat3 : "+pattern.test('Ifat3')); //输出 true console.log("三十课毛瑞 : "+pattern.test('三十课毛瑞')); //输出 false console.log("30ke : "+pattern.test('30ke')); //输出 false console.log("ke3 : "+pattern.test('ke3')); //输出 false console.log("ke30@ : "+pattern.test('ke30@')); //输出 false console.log("ke30ke30ke30ke30ke30 : "+pattern.test('ke30ke30ke30ke30ke30'));其中[\u4E00-\u9FA5]是汉字的正则匹配,包括基本汉字2万多个,其中\u4E00表示汉字“一”,具体请参见《汉字unicode编码范围》。
上述正则表达式只能对用户密码强度进行基本的通过性判定,关于密码强度验证更多的内容可参见:基于规则评分的密码强度检测算法分析及实现。
2.3.1 整数正则
? 1 2 3 4 5 6 7 8 9 10 11 12 //正整数正则 var posPattern = /^\d+$/; //负整数正则 var negPattern = /^-\d+$/; //整数正则 var intPattern = /^-?\d+$/; //输出 true console.log("30:"+posPattern.test("30")); //输出 true console.log("-30:"+negPattern.test("-30")); //输出 true console.log("-30:"+intPattern.test("-30"));
2.3.2 浮点数正则
? 1 2 3 4 5 6 7 8 9 10 11 12 //正浮点数正则 var posPattern = /^\d*\.\d+$/; //负浮点数正则 var negPattern = /^-\d*\.\d+$/; //两位小数正则 var twoPattern = /^-?\d*\.\d{2}$/; //输出 true console.log("30.2:"+posPattern.test("30.2")); //输出 true console.log("-30.2:"+negPattern.test("-30.2")); //输出 true console.log("-30.22:"+twoPattern.test("-30.22"));
2.3.3 整数浮点数正则
可以是整数也可以是浮点数
? 1 2 3 4 5 6 7 8 9 10 11 12 //正数正则 var posPattern = /^\d*\.?\d+$/; //负数正则 var negPattern = /^-\d*\.?\d+$/; //数字正则 var numPattern = /^-?\d*\.?\d+$/; //输出 true console.log("30.2:"+posPattern.test("30.2")); //输出 true console.log("-30.2:"+negPattern.test("-30.2")); //输出 true console.log("-30.2:"+numPattern.test("-30.2"));
2.4.1 出生日期正则
? 1 2 3 4 5 6 7 8 9 var pattern = /^((19[2-9]\d{1})|(20((0[0-9])|(1[0-8]))))\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2][0-9])|30|31)$/; //输出 true console.log(pattern.test("1923-3-18")); //输出 true console.log(pattern.test("1923-4-31")); //输出 true console.log(pattern.test("1923-2-29")); //输出 true console.log(pattern.test("2016-2-29"));上述正则验证还不完善,主要是2,4,6,9,11月份的天数问题。
2.4.2 通用日期正则
? 1 2 3 4 5 6 7 8 //日期正则,复杂判定 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)$/; //输出 true console.log(dP2.test("2017-02-11")); //输出 false console.log(dP2.test("2017-15-11")); //输出 false console.log(dP2.test("2017-02-29"));
2.5.1 基本Email正则
? 1 2 3 4 5 6 7 8 9 10 11 12 13 var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; //输出 true console.log(pattern.test('cn30ke@163.com')); //输出 true console.log(pattern.test('ifat3@sina.com.cn')); //输出 true console.log(pattern.test('ifat3.it@163.com')); //输出 true console.log(pattern.test('ifat3_-.@30ke.cn')); //输出 false console.log(pattern.test('ifat3@30ke.online')); //输出 false console.log(pattern.test('毛瑞@30ke.cn'));基本Email正则是最常用的验证方式,也适合大多数的应用场景。从以上测试可以看出,该表达式不支持.online及.store结尾的域名。如需兼容这类域名(大于4位),调整正则结尾{2,4}的限制部分即可(例:{2,8})。另一个问题是Email用户名不能包括中文。
2.5.2 中文名Email正则
根据前一正则中的问题,追加两条规则如下:
用户名可以包括中文 [\u4e00-\u9fa5]
域名结尾最长可为8位 {2,8}
2.5.3 特定域名Email正则
在手机验证码出现之前,差不多邮箱验证是保证用户唯一性的唯一条件。而临时邮箱(也称10分钟邮箱或一次性邮箱)的出现,则使得邮箱验证及帐户激活这种机制失去了意义。而临时邮箱的地址是不可枚举的,我们只能才采取白名单的方式,只允许有限的邮箱域名通过验证。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 var pattern = /^([A-Za-z0-9_\-\.])+\@(163.com|qq.com|30ke.cn)$/; //输出 true console.log(pattern.test('cn30ke@163.com')); //输出 false console.log(pattern.test('ifat3@sina.com.cn')); //输出 true console.log(pattern.test('ifat3.it@163.com')); //输出 true console.log(pattern.test('ifat3_-.@30ke.cn')); //输出 false console.log(pattern.test('ifat3@30ke.online')); //输出 false console.log(pattern.test('毛瑞@30ke.cn'));此方法虽然能保证验证安全性,但是如果白名单太长会造成模式字符串太长。这时可以将邮箱域名白名单写成数组,利用正则表达式做初步验证,用白名单做域名的二次验证。
常用域名白名单数组:
? 1 var domains= ["qq.com","163.com","vip.163.com","263.net","yeah.net","sohu.com","sina.cn","sina.com","eyou.com","gmail.com","hotmail.com"];上述白名单只列举了常用的11种邮箱域名,大家可以根据需要适当补充或删减。
上述正则只能对身份证号进行基本的通过性判定,关于公民身份号码判定的更多内容可参见文档:公民身份号码正确性判定及程序实现
2.9.1 IPv4地址正则
? 1 2 3 4 //ipv4地址正则 var ipP = /^(?:(?: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]?)$/; //输出 true console.log(ipP.test("115.28.47.26"));
2.9.2 IPv6地址正则
? 1 2 3 4 //IPV6正则 var pattern = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/; //输出 true console.log(pattern.test("fe80:0000:0000:0000:0204:61ff:fe9d:f156"));
总结
以上所述是小编给大家介绍的常用JavaScript正则表达式汇编与示例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:http://30ke.cn/doc/js-regexp#password
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
javascript正则表达式分组、断言详解提示:阅读本文需要有一定的正则表达式基础。正则表达式中的断言,作为高级应用出现,倒不是因为它有多难,而是概念比较抽象
JavaScript中的正则表达式解析正则表达式(regularexpression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配
在上篇给大家介绍了Java中正则表达式的使用和详解(上),具体内容如下所示:1.常用正则表达式规则正则表达式语法一个或多个汉字^[\u0391-\uFFE5]+
感谢AKA及作者。Perl中的正则表达式正则表达式的三种形式正则表达式中的常用模式正则表达式的8大原则 正则表达式是Perl语言的一大特色,也是Perl程序中
上篇文章给大家介绍了javascript正则表达式上之基本语法介绍了javascript正则表达式的语法,有了这些基本知识,可以看看正则表达式在javascri