< JavaScript技巧:如何优雅的使用 【正则】校验 >

头部标识图片

文章目录

  • 👉 一、正则表达式的概念
  • 👉 二、常见使用正则表达式的方法
    • ① RegExp 对象方法
      • 1. 创建 RegExp 对象的语法
      • 2. RegExp对象方法
        • ① compile(value)
        • ② exec(value)
        • ③ test(value)
        • ③ reg.toString()
    • ② 支持正则表达式的 `String` 对象的方法
      • 1. search() 检索正则匹配字符串
      • 2. match(pattern) 提取字符串中符合正则匹配的字符
      • 3. replace() 根据正则进行字符替换
      • 4. split() 根据正则将字符串进行分隔
  • 👉 三、正则修饰符
  • 👉 四、常用正则表达式(日常更新)
    • 1. 匹配ASCII码范围
    • 2. 匹配汉字
    • 3. 邮政编码
    • 4. 电子邮件
    • 5. 验证是否含有^%&',;=?$\"等违规字符
    • 6. 数值类型筛选
    • 7. 仅数字加英文
    • 8. 密码校验
    • 9. 全正则校验登录
    • 10. 强密码正则
    • 11. 身份证正则校验(加强型)
    • 12. 域名正则
    • 13. 车牌号码正则
    • 14. 匹配特定字符
  • 👉 五、正则常用理论知识
  • 📃 参考文献
  • 往期内容 💨


🏳‍🌈 大家新年好啊! 新年第一篇文章,主要想跟大家分享一下在Javascript中正则的使用方法,以及一些常用的正则表达式,希望这篇文章能够帮助到你。

下面我们开始今天的内容吧 ! !!

👉 一、正则表达式的概念

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE)。是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式是描述字符模式的对象,正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。

有一点需要明确知道,正则表达式只能对字符串进行操作。

👉 二、常见使用正则表达式的方法

① RegExp 对象方法

RegExp对象,是原生JavaScript中表示正则表达式的对象;是正则表达式(regular expression)的简写。

1. 创建 RegExp 对象的语法

两种语法方式,一是新建RegExp对象,另一个直接创建。

// 语法一
var patt=new RegExp(pattern,attributes);// 语法二
var patt=/pattern/attributes;// 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。/* 参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配
ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。*/

2. RegExp对象方法

方法描述
compile在 1.5 版本中已废弃。 编译正则表达式。
exec检索字符串中指定的值。返回找到的值,并确定其位置。
test检索字符串中指定的值。返回 truefalse
toString返回正则表达式的字符串。
① compile(value)

compile() 可以重新指定正则实例的规则与修饰符。

var pattern = /e/i;
pattern.compile('a','g')

规则由大小写检查 e 变为全局搜索 a;

② exec(value)

检索字符串中的指定值,返回值是被找到的值。如果没有发现匹配,则返回 null

var patt1=new RegExp("e");
document.write(patt1.exec("The best things in life are free"));

由于该字符串中存在字母 “e”,以上代码的输出将是:e

③ test(value)

检索字符串中的指定值,返回值是true或false。

var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));

由于该字符串中存在字母 “e”,以上代码的输出将是:true;

③ reg.toString()

返回正则表达式的字符串值。

var patt = new RegExp("表达式", "g");
var res = patt.toString();
console.log(res); // “ /表达式/g ”

由于该字符串中存在字母 “e”,以上代码的输出将是:true;

② 支持正则表达式的 String 对象的方法

方法描述
search检索与正则表达式相匹配的值。
match找到一个或多个正则表达式的匹配。
replace替换与正则表达式匹配的子串。
split把字符串分割为字符串数组。

1. search() 检索正则匹配字符串

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

根绝匹配规则pattern在字符串中检索指定的结果,如果检索到则返回该结果首字母在原字符中的索引,否则返回-1。其功能类似于indexOf, 只是indexOf并不支持正则匹配。

var str = "Mr. Blue has a blue house"
var n = str.search("blue");
var n1 = str.search("Mr");
console.log(n, n1); // --> 14, 0

2. match(pattern) 提取字符串中符合正则匹配的字符

match 在功能上与正则对象自带的方法exec很类似。

match 根据匹配规则pattern匹配指定的字符串str,如果匹配成功则返回一个数组格式的结果用于存放匹配文本有关的信息,如果没有匹配到则返回null。

var result = str.match(pattern);result --> 当前的匹配结果。
result[0] --> 从数组中读取当前的匹配结果。
result[1]
.... ---> 指定分组中捕获的内容。
result[n+1]
result.index --> 当前匹配结果的首字母在给定字符串中的索引。
result.input --> 进行匹配操作的给定字符串。如果match的匹配规则是一个正则,并且具有全局g属性,那么match返回的匹配结果,便是一个包含所有匹配结果的纯数组。var str = 'abcdabcda';
var result = str.match(/a/g);
result --> [a,a,a]
result.input --> undefined
result.index --> undefined

3. replace() 根据正则进行字符替换

replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str = 'blue123blue'; 
var n=str.replace(/blue/gi,"red");
console.log(n); // red123red

4. split() 根据正则将字符串进行分隔

语法:str.split(pattern,length)

根据规则pattern将字符串拆分为数组,拆分后的数组并不包含作为拆分依据的那个参数。
默认情况下是空字符进行拆分,也就是每个任意的字符作为一个数组元素。

pattern参数,可以是正则表达式,也可以是单纯的字符或字符串。
length参数,用于设置拆分数组后数组最大的长度(即数组元素的个数)。缺省该项,表示将字符全部拆分为数组。

var str = 'hellow word!';
str.spilit(''); // --> ''空字符(并非空格字符)["h", "e", "l", "l", "o", "w", " ", "w", "o", "r", "l", "d", "!"]
str.split('',5) // --> ["h", "e", "l", "l", "o"]
str.split(/\o/g) // --> ["hell", "w w", "rld!"]

👉 三、正则修饰符

修饰符” 其含义类似于正则实例的附加属性。用于说明正则规则适用匹配的范围。

  • i : 表示区分大小写字母匹配。
  • m :表示多行匹配。
  • g : 表示全局匹配。

在非全局的情况下,正则会根据指定的“规则”,从左至右 对字符串进行匹配,一旦规则匹配完,便会停止匹配操作,返回结果。

在全局的的情况下,正则会根据指定的“规则”, 从左至右 对字符串进行匹配,一旦规则匹配完,便会在当前字符串匹配位置,重新使用“规则”继续向下匹配,一直到字符串匹配完成。

注:i,g,m三个修饰符可以相互组合同时使用

👉 四、常用正则表达式(日常更新)

1. 匹配ASCII码范围

\x00 表示十进制0 ,\xff 表示十进制255,0-255 正好是ASCII码表可表示的范围。

正则: `/[\x00-\xff]/g` 
说明:同理, `/[^\x00-\xff]/g`   则表示匹配汉字或者是全角字符。

2. 匹配汉字

\u4e00 : 在Unicode码中汉字的开始编码,\u9fa5 : 在Unicode码中汉字的结束编码。

正则: `/^[\u4e00-\u9fa5]+$/` 

3. 邮政编码

邮政编码必须为数字,长度为6位且第一位不能为0,示例:224000

正则: `/[1-9]\d{5}/` 

4. 电子邮件

规则:以@为上下文表示,左侧只能是数字,字母及下划线组成。
而右侧又以.符号为上下文,左侧与上述一样,而右侧只能为字母结尾。

正则: `/^([\w\-\.]+)@([\w\-]+)\.([a-zA-Z]{2,4})$/` 

5. 验证是否含有^%&',;=?$"等违规字符

常用于名称和密码筛选特殊字符

正则: `/[^%&',;=?$\x22]+/`

6. 数值类型筛选

^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$    //匹配负整数
^-?[1-9]\d*$  //匹配整数
^[1-9]\d*|0$   //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$  //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   	//匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$     //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)

7. 仅数字加英文

正则:/^[a-zA-Z0-9]+$/

8. 密码校验

6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种

/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/,

9. 全正则校验登录

var reg1= /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/
if(!reg1.test(this.username)) {this.dialog = "用户名/手机号请输入中英文/数字/下划线";return false;
}var reg2= /^.{1,50}$/
if(!reg2.test(this.username)) {this.dialog = "用户名/手机号长度在 1 到 50 个字符";return false;
}var reg3= /^[a-zA-Z0-9_]*$/
if(!reg3.test(this.password)) {this.dialog = "密码请输入字母/数字/下划线";return false;
}var reg4= /^.{6,24}$/
if(!reg4.test(this.password)) {this.dialog = "密码长度在 6 到 24 个字符";return false;
} 

10. 强密码正则

基础密码正则,以字母开头,长度在6~18之间,只能包含字母、数字和下划线

let isTrue =^[a-zA-Z]\w{5,17}$;

中等强度密码,必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间

let pwd = /^(?=.\d)(?=.[a-z])(?=.[A-Z]).{8,10}$/

高强度密码正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符

let isTrue = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;

11. 身份证正则校验(加强型)

第一代身份证只有15位数,第二代身份证有18位数,各位按照需求来选择表达式。

//第二代身份证号码正则let isTrue = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;//第一代身份证正则表达式(15位)let isTrue=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;

12. 域名正则

let reg =[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?;  

13. 车牌号码正则

let isTrue = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;

14. 匹配特定字符

^[A-Za-z]+$       //匹配由26个英文字母组成的字符串
^[A-Z]+$           //匹配由26个英文字母的大写组成的字符串
^[a-z]+$          //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  	//匹配由数字和26个英文字母组成的字符串
^\w+$             //匹配由数字、26个英文字母或者下划线组成的字符串 

👉 五、正则常用理论知识

  1. 贪婪:+,*,?,{m,n}等,默认是贪婪匹配,即尽可能多匹配,也叫最大匹配
    如果后面加上?,就转化为非贪婪匹配,需要高版本支持;
  2. 获取:默认用(x|y)是获取匹配,很多时候只是测试,不一定要求得到所匹配的数据,尤其在嵌套匹配或大数据中就要用非获取匹配 (?:x|y),这样提高了效率,优化了程序。
  3. 消耗:默认是消耗匹配,一般在预查中是非消耗匹配。
    举个例子: 2003-2-8要变为2003-02-08
    如果用 /-(\d)-/ 第二次匹配将从8开始,从而只替换第一个2,错误
    如果用 /-(\d)(?=-)/ 则第二次匹配从第二个-开始,即不消耗字符
  4. 预查:js中分为正向预查和负向预查
    如上面的(?=pattern)是正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。还有(?!pattern)负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。负向预查有时会用在对[^]的扩充,[^]只是一些字符,而?!可以使整个字符串。
  5. 回调:一般用在替换上,即根据不用的匹配内容返回不用的替换值,从而简化了程序,需要高版本支持
  6. 引用:\num 对所获取的第num个匹配的引用。
    例如,‘(.)\1\1’ 匹配AAA型。‘(.)(.)\2\1’ 匹配ABBA型。

📃 参考文献

  • JavaScript RegExp 正则表达式基础详谈 - Jack_孟
  • javascript中使用正则的方法有哪些
  • 【VUE+Elemet 】最全正则验证 + 表单验证 + 注意事项

往期内容 💨

🔥 < elementUI组件样式及功能补全: 实现点击steps组件跳转对应步骤 >

🔥 < vueUse工具集:初识 vueUse 和 useIntersectionObserver 响应式监听目标元素的可见性,实现组件异步加载 >

🔥 < elementUi 组件插件: el-table表格拖拽修改列宽及行高 及 使用注意事项 >

🔥 < 今日小技巧:Axios封装,接口请求增加防抖功能 >

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-学以致用-devops知识点1-安装gitlabharbor

文章目录 rpm 安装gitlab页面配置配置secretsecret 查看信息-chatgpt回复 为项目配置webhook,等jenkins部署完毕后在配置卸载 harbor配置secret所有k8s集群节点安装信任 http rpm 安装gitlab # 下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitla…

统计分析笔记3

文章目录 统计检验选择正确的统计检验统计检验是做什么的?何时进行统计检验选择参数化测试:回归、比较或相关性选择非参数检验 假设检验的假设条件skewness什么是零偏度right skewleft skew计算skewnesswhat to do if your data is skewed kurtosis怎么计…

BevFusion (2): nuScenes 数据介绍及点云可视化

1. nuScenes 数据集 1.1 概述 nuScenes 数据集 (pronounced /nu:ːsiː:nz/) 是由 Motional (以前称为 nuTonomy) 团队开发的自动驾驶公共大型数据集。nuScenes 数据集的灵感来自于开创性的 KITTI 数据集。 nuScenes 是第一个提供自动驾驶车辆整个传感器套件 (6 个摄像头、1 …

计算机网络:IP

引言: IP协议是互联网协议族中的核心协议之一,负责为数据包在网络中传输提供路由寻址。它定义了数据包如何在互联网上从源地址传输到目的地址的规则和流程。IP协议使得各种不同类型的网络设备能够相互通信,实现了全球范围内的信息交换。 目录…

Qt项目:网络1

文章目录 项目:网路项目1:主机信息查询1.1 QHostInfo类和QNetworkInterface类1.2 主机信息查询项目实现 项目2:基于HTTP的网络应用程序2.1 项目中用到的函数详解2.2 主要源码 项目:网路 项目1:主机信息查询 使用QHostI…

基于vue的图书管理系统的设计与实现

高校师生在教学中承受的压力越大就对知识拥有了更多的需求,而满足这一需求的最佳场所无疑就是图书馆。当前虽然信息技术在各个方面都发挥出重要作用,但是在相当多的高校图书馆中依然由工作人员手动完成图书借阅、归还及逾期提醒等所有工作,在…

如何使用Logstash搜集日志传输到es集群并使用kibana检测

引言:上一期我们进行了对Elasticsearch和kibana的部署,今天我们来解决如何使用Logstash搜集日志传输到es集群并使用kibana检测 目录 Logstash部署 1.安装配置Logstash (1)安装 (2)测试文件 &#xff…

集群分发脚本xsync

集群分发脚本xsync 一、简介二、环境准备三、添加到机器的 hosts 文件四、ping 命令测试五、SSH 配置5.1.本地先生成公钥和私钥5.2.将公钥拷贝到其他机器 六、xsync 脚本编写6.1.安装 rsync6.2.新建 xsync.sh6.3.xsync.sh脚本6.4.赋予脚本执行权限6.5.测试 endl 一、简介 配置…

完全分布式运行模式

完全分布式运行模式 分析:之前已经配置完成 ​ 1)准备3台客户机(关闭防火墙、静态ip、主机名称) ​ 2)安装JDK ​ 3)配置环境变量 ​ 4)安装Hadoop ​ 5)配置环境变量 ​ 6&am…

163邮箱SMTP端口号及服务器地址详细设置?

163邮箱SMTP端口号是什么?163邮件SMTP设置教程? 除了基本的邮箱账号和密码外,还需要了解SMTP服务器地址和端口号,以及相应的设置。这些设置对于确保邮件能够顺利发送至关重要。下面,蜂邮EDM将详细介绍163邮箱SMTP端口…

Ubuntu常用状态命令

目录 一、温度 1,查看CPU温度 2,查看硬盘温度 二、CPU状态 1,显示CPU的详细信息,包括型号、频率、缓存等 2,显示CPU架构、CPU核心数、线程数、频率等信息 三、登录状态 1,查看成功登录的用户 2&am…

2024年腾讯云4核8G12M配置的轻量服务器同时支持多大访问量?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

第12届生物发酵产品与技术装备展火热登场-通用环境控制技术

参展企业介绍 合肥通用环境控制技术有限责任公司隶属于中国机械工业集团有限公司(世界500强排名279),是中央直接管理的国有重要骨干上市央企(国机通用 600444),是国家级高新技术企业、国家火炬计划重点高新…

区块链智能合约开发

一.区块链的回顾 1.区块链 区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本 特征: 去中心化:简单来说,在网络上一个或多个服务器瘫痪的情况下,应用或服务仍然能够持续地运行,这就是去中心化。服务和应用部署在…

Mendix 10.7 发布- Go Mac It!

在我们上个月发布了硕果累累的 Mendix 10.6 MTS 之后,您是否还没有抚平激动的情绪?好吧,不管您是否已经准备好,本月将带来另一个您想知道的大亮点——Mac版Studio Pro!但这还不是全部。本月,我们还将推出Re…

Kafka安全模式之身份认证

一、简介 Kafka作为一个分布式的发布-订阅消息系统,在日常项目中被频繁使用,通常情况下无论是生产者还是消费者只要订阅Topic后,即可进行消息的发送和接收。而kafka在0.9.0.0版本后添加了身份认证和权限控制两种安全服务,本文主要…

dcat admin 自定义页面

自定义用户详情页 整体分为两部分:用户信息、tab框 用户信息采用自定义页面加载,controller代码如下: protected function detail($id) {return Show::make($id, GameUser::with(finance), function (Show $show) {// 这段就是加载自定义页面…

frp 内网穿透 linux部署版

frp 内网穿透 linux部署版 前提安装 frp阿里云服务器配置测试服务器配置访问公网 前提 使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过访问公网 IP 直接可以访问到内网的测试环境。准备如下: 公网 IP已部署好的测试服务 IP:端口号阿…

【可实战】被测系统业务架构、系统架构、技术架构、数据流、业务逻辑分析

一、为什么要学习 更深的理解业务逻辑(公司是做什么的?它最重要的商务决策是什么?它里面的数据流是怎么做的?有哪些业务场景?考验你对这家公司、对所负责业务的熟悉程度。公司背后服务器用什么软件搭建的?…

小程序框架(概念、工作原理、发展及应用)

引言 移动应用的普及使得用户对于轻量级、即时可用的应用程序需求越来越迫切。在这个背景下,小程序应运而生,成为一种无需下载安装、即点即用的应用形式,为用户提供了更便捷的体验。小程序的快速发展离不开强大的开发支持,而小程…