常用JavaScript正则表达式(regexp)

2024-03-14 01:38

本文主要是介绍常用JavaScript正则表达式(regexp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

表单验证处理必备

用户名、密码强度、整数、数字、电子邮件地址(Email)、手机号码、身份证号、URL地址、 IP地址、 十六进制颜色、 日期、 微信号、车牌号、中文正则等;

一、用户名正则

1、基本用户名正则

定义基本用户名命名规则如下:

  • 最短4位,最长16位 {4,16}
  • 可以包含小写大母 [a-z] 和大写字母 [A-Z]
  • 可以包含数字 [0-9]
  • 可以包含下划线 [ _ ] 和减号 [ - ]
  • 首字母只能是大小写字母
var pattern = /^[a-zA-Z][a-zA-Z0-9_-]{3,15}$/;
//输出 true
console.log("ifat3 : "+pattern.test('ifat3'));
//输出 true
console.log("Ifat3 : "+pattern.test('Ifat3'));
//输出 true
console.log("ke30 : "+pattern.test('ke30'));
//输出 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'));

2、中文用户名正则

如果规则中加入允许中文用户名,则变更正则表达式如下:

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编码范围》;

二、密码强度正则

// 密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;
// 输出 true
console.log("iFat3#:" + pPattern.test("iFat3#"));

密码强度:基于规则评分的密码强度检测算法分析及实现http://30ke.cn/doc/pass-strength

三、数字相关正则

1、整数正则

// 正整数正则
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、浮点数正则

// 正浮点数正则
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"));

3、整数浮点数正则

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

// 正数正则
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"));

四、日期正则

1、出生日期正则

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、通用日期正则

// 日期正则,复杂判定
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"));

五、Email正则

1、基本Email正则

var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;
// 输出 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、中文名Email正则

根据前一正则中的问题,追加两条规则如下:

  • 用户名可以包括中文 [\u4e00-\u9fa5]
  • 域名结尾最长可为8位 {2,8}
var pattern = /^([A-Za-z0-9_\-\.\u4e00-\u9fa5])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;
// 输出 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'));
// 输出 true
console.log(pattern.test('ifat3@30ke.online'));
// 输出 true
console.log(pattern.test('毛瑞@30ke.cn'));

3、特定域名Email正则

在手机验证码出现之前,差不多邮箱验证是保证用户唯一性的唯一条件。而临时邮箱(也称10分钟邮箱或一次性邮箱)的出现,则使得邮箱验证及帐户激活这种机制失去了意义。而临时邮箱的地址是不可枚举的,我们只能才采取白名单的方式,只允许有限的邮箱域名通过验证。

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'));
// 此方法虽然能保证验证安全性,但是如果白名单太长会造成模式字符串太长。这时可以将邮箱域名白名单写成数组,利用正则表达式做初步验证,用白名单做域名的二次验证;

常用域名白名单数组:

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种邮箱域名;

六、手机号码正则

// 手机号正则
var mPattern = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;
// 输出 true
console.log(mPattern.test("18600000000"));

七、身份证号正则

// 身份证号(18位)正则
var cP = /^[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]$/;
// 输出 true
console.log(cP.test("11010519880605371X"));

八、URL正则

// URL正则
var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
// 输出 true
console.log(urlP.test("http://30ke.cn"));

九、IP地址

1、IPv4地址正则

// 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、 IPv6地址正则

// 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"));

十、十六进制颜色正则

// RGB Hex颜色正则
var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;
// 输出 true
console.log(cPattern.test("#b8b8b8"));

十一、QQ号码正则

// QQ号正则,5至11位
var qqPattern = /^[1-9][0-9]{4,10}$/;
// 输出 true
console.log(qqPattern.test("65974040"));

十二、微信号正则

// 微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
// 输出 true
console.log(wxPattern.test("RuilongMao"));

十三、车牌号正则

// 车牌号正则
var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
// 输出 true
console.log(cPattern.test("京K39006"));

十四、包含中文正则

//包含中文正则
var cnPattern = /[\u4E00-\u9FA5]/;
//输出 true
console.log(cnPattern.test("30课"));


感谢作者

三十课毛瑞
链接:http://www.imooc.com/article/285764

 

 

这篇关于常用JavaScript正则表达式(regexp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806849

相关文章

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin