正则表达式以及密码匹配案例手机号码脱敏案例

news2024/11/29 20:45:53

目录

正则表达式

什么是正则表达式

语法

定义变量

test方法

exec方法

replace方法

match方法

修饰符

元字符

边界符

单词边界

字符串边界

边界符:^

边界符:$

量词

*

+

?

{n}

{n,}

{n,m}

字符类

[]匹配字符集合

.匹配除换行符之外的任意单个字符

预定义

分组和分支结构

分组

分组捕获

分支结构

案例

密码匹配:6-16位字母、数字或者下划线

手机号码脱敏


正则表达式

什么是正则表达式

  • 正则表达式是用于匹配字符串中字符组合的模式,许多语言都支持正则表达式。在JavaScript中正则表达式也是对象。
  • 就是用来匹配字符串的规则
  1. 判断一个字符串中是否包含有某个字符或者某个字符串
  1. 判断用户输入的手机号是否合法

语法

定义变量

const reg = /前端/

test方法

  • 用来查看正则表达式与指定的字符串是否匹配。

返回一个布尔值,匹配到返回true,匹配不到返回false。

exec方法

  • 查找符合规则的字符串
  • 返回值为一个数组,并且会返回目标字符的起始索引
  • 如果找不到则会返回一个NULL

replace方法

  • 用来替换字符串中符合规则的字符
  • 可以用来进行敏感词替换

match方法

  • 在字符串内检索指定的值,或找到一个或者多个正则表达式的匹配。

修饰符

修饰符约束正则执行的某些细节行为,如是否区分大小写、是否全局匹配。

  • i:单词ignore的缩写,正则匹配时字母不区分大小写
  • g:单词global的缩写,匹配所有满足正则表达式的结果

元字符

  • 是一些具有特殊含义的字符,可以极大提高灵活性和强大的匹配功能

边界符

单词边界

找出某句话中的某个单词,例如“The cat scattered his food all over the room”

想找到cat这个单词,但是如果只是使用/cat/这个正则,就会同时匹配到catscattered这两处文本,这时候就可以用到单词边界\b,它其实匹配的是能构成单词的字符(\w)和不能构成单词的字符(\W)中间的那个位置。

JavaScript
        const ret = /\bcat\b/g
        const str = "The cat scattered his food all over the room"
        console.log(str.replace(ret,"dog"));

字符串边界
边界符:^
  • 表示匹配行首的文本

JavaScript
        const reg = /^a/
        console.log(reg.test('a')); //true
        console.log(reg.test('abc')); //true
        console.log(reg.test('Abd')); //false

边界符:$
  • 表示匹配行尾的文本

JavaScript
        const reg = /a$/
        console.log(reg.test('a')); //true
        console.log(reg.test('abc')); //false
        console.log(reg.test('Abda')); //true

注意:如果^$在一起,表示必须是精确匹配。

量词

  • 表示某个模式出现的次数

*

  • 重复0次或者更多次

JavaScript
        //*:表示0次或者更多次
        const reg = /^a*$/
        console.log(reg.test("aaaaa"));//true
        console.log(reg.test("aaaab"));//false
        console.log(reg.test(""));//true
        console.log(reg.test("dsifhw"));//false

+

  • 重复1次或者更多次

JavaScript
        const reg = /^a+$/
        console.log(reg.test("aaaaa"));//true
        console.log(reg.test("aaaab"));//false
        console.log(reg.test(""));//false
        console.log(reg.test("dsifhw"));//false

?

  • 重复0次或者1次

JavaScript
        const reg = /^a?$/
        console.log(reg.test("aaaaa"));//false
        console.log(reg.test("a"));//true
        console.log(reg.test(""));//true
        console.log(reg.test("dsifhw"));//false

{n}

  • 重复n次

{n,}

  • 重复n次或者更多次

{n,m}

  • 重复n到m次

字符类

[]匹配字符集合

  • 后面的字符串只要包含abc中任意一个字符即可

const reg1 = /[abc]/

  • 使用连字符-表示一个范围

const reg2 = /[a-z]/   //匹配26个英文小写字母中的任意一个

  • []里面加上^表示取反,注意要写到中括号里面

const reg3 = /[^a-z]/ 表示匹配除了26个小写字母以外的字符

.匹配除换行符之外的任意单个字符

JavaScript
        const reg = /./
        console.log(reg.test(""));//false;
        console.log(reg.test("abc"));//true;
        console.log(reg.test("1"));//true;
        console.log(reg.test("\n"));//false;
        console.log(reg.test("\r"));//false;

预定义

  • 指的是某些常见模式的简写方式

分组和分支结构

分组

我们知道/a+/匹配连续出现的"a",而要匹配连续出现的"ab"时,需要使用/(ab)+/,其中括号是提供分组功能,使量词+作用于"ab"这个整体。

分组捕获

分支结构

  • 使用|来进行分支

JavaScript
        const str1 = "让我们一起学前端"
        const str2 = "让我们一起学python"
        const str3 = "让我们一起学C语言"
        const reg = /前端|python/
        console.log(reg.test(str1)); //true
        console.log(reg.test(str2)); //true
        console.log(reg.test(str3)); //false

案例

密码匹配:6-16位字母、数字或者下划线

const reg = /^[a-zA-Z0-9_]{6,16}$/

手机号码脱敏

JavaScript
     //手机号码脱敏
        const str = "15812345678"
        //字符串方法
        // console.log(str.substring(0,3)+"****"+str.substring(7,11));
        //正则方法:
        const reg = /^(1[3-9]\d)\d{4}(\d{4})/
        console.log(str.replace(reg,"$1****$2"));

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

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

相关文章

面向对象编程中类与类之间的关系(一)

目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员,必然会遇到这样的情况:不同的类具有共同的特征,至少看起来彼…

【zotero7】茉莉花抓取文献失败解决方案

1、先安装好茉莉花 工具 ----》设置按钮–》从github上下载 xpi文件 2. 配置茉莉花 选择设置–》看到茉莉花–》红色字体 pdftk下载链接: https://www.pdflabs.com/tools/pdftk-server/ 3.打开插件 --》扩展插件 刷新

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程,参见如下链接:修改ppt注册表,导出高分辨率图片 Step2. 打开PPT,找到自己想要保存的图,选中图像,查看图像尺寸并记录 Step3. 重新新建一个PPT,并根据记录的图片…

C语言 | Leetcode C语言题解之第518题零钱兑换II

题目&#xff1a; 题解&#xff1a; int change(int amount, int* coins, int coinsSize) {int dp[amount 1];bool valid[amount 1];memset(dp, 0, sizeof(dp));memset(valid, false, sizeof(valid));dp[0] 1;valid[0] true;for (int i 0; i < coinsSize; i) {for (in…

rhcsa 第二次作业

# tee:编辑文件&#xff1a;编辑文件的同时&#xff0c;标准输出也会有内容显示 # | 管道符&#xff1a;将多个命令连接起来执行&#xff0c;将|左边的命令的运行结果&#xff0c;传递给右边的命令 # ls -l | tee a.txt # >&#xff1a;输出重定向 # 使用输出…

信创环境模拟:X86架构下部署搭建aarch64的ARM虚拟机

在真实系统为x86架构下&#xff0c;搭建arm64的虚拟开发环境。在该环境中直接下载打包项目依赖的python运行环境。 前言 随着国家信创环境的要求普及&#xff0c;基本和国家沾边的政企事业单位都换成了信创环境&#xff0c;即ARM64的cpu服务器&#xff0c;而且该类服务器是不…

Cesium基础-(Entity)-(Box)

** 里边包含Vue、React框架代码详细步骤、以及代码详细解释 ** 3、Box 盒子 以下是 BoxGeometry 类的属性、方法和静态方法,以表格形式展示: 属性 属性名类型默认值描述minimumCartesian3盒子的最小 x, y, 和 z 坐标。maximumCartesian3盒子的最大 x, y, 和 z 坐标。vertex…

四个模型(CV、CA、左转CT、右转CT)的交互式多模型系统,介绍与MATLAB例程

文章目录 引言一、模型概述1.1 连续变量模型&#xff08;CV&#xff09;1.2 离散变量模型&#xff08;CA&#xff09;1.3 左转控制器&#xff08;CT&#xff09;1.4 右转控制器&#xff08;CT&#xff09; 二、交互式多模型系统2.1 系统架构 三、MATLAB实现3.1 MATLAB代码3.2 代…

软硬链接_动静态库

软硬链接 软链接创建 硬链接创建 软链接是独立文件&#xff08;独立inode号&#xff09; 硬链接不是独立文件&#xff08;inode和目标相同&#xff09; 如何理解软硬链接 软链接有独立inode&#xff0c;软链接内容上&#xff0c;保存的是文件路径 硬链接不是独立文件&#xf…

labelimg使用教程

快捷键 W&#xff1a;调出标注的十字架&#xff0c;开始标注 A&#xff1a;切换到上一张图片 D&#xff1a;切换到下一张图片 del&#xff1a;删除标注的矩形框 CtrlS&#xff1a;保存标注好的标签 Ctrl鼠标滚轮&#xff1a;按住Ctrl&#xff0c;然后滚动鼠标滚轮&#xff0c;…

Java | Leetcode Java题解之第517题超级洗衣机

题目&#xff1a; 题解&#xff1a; class Solution {public int findMinMoves(int[] machines) {int tot Arrays.stream(machines).sum();int n machines.length;if (tot % n ! 0) {return -1;}int avg tot / n;int ans 0, sum 0;for (int num : machines) {num - avg;s…

鸿蒙UI系统组件18——模态交互框(ModelDialog)

1、概 述 模态&#xff08;Modal&#xff09;指的是UI组件或视图的一种状态。在模态组件消失前&#xff0c;用户只能对处于模态的组件或视图进行响应&#xff0c;不能操作其他非模态的组件或视图。 ArkUI中可通过使用AlertDialog、CustomDialog、ActionSheet、Popup、Menu、C…

力扣题86~90

题86&#xff08;中等&#xff09;&#xff1a; python代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def partition(self, head: Optional[Li…

JavaEE初阶---网络原理/UDP服务器客户端程序

文章目录 1.网络初识2.网络编程2.1TCP/UDP区别介绍2.2UDP的socket api使用2.3UDP协议里面的服务器客户端程序 1.网络初识 网络和计算机类似&#xff1a;都是属于军用》民用&#xff1b; 网络诞生于美苏争霸时期&#xff0c;当时就感觉核战争一触即发&#xff0c;形式非常严峻…

.NET 8 中的 Mini WebApi

介绍 .NET 8 中的极简 API 隆重登场&#xff0c;重新定义了我们构建 Web 服务的方式。如果您想知道极简 API 的工作原理以及它们如何简化您的开发流程&#xff0c;让我们通过一些引人入胜的示例来深入了解一下。 .NET 极简主义的诞生 想想我们曾经不得不为一个简单的 Web 服务…

在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用

Starknet 和 EVM 我们所知的智能合约世界一直围绕着以太坊虚拟机&#xff08;EVM&#xff09;&#xff0c;其主要语言是 Solidity。 尽管 Starknet 通过 STARKs 为以太坊开辟了新的可能性&#xff0c;但其缺点是它有一个不同的虚拟机 (CairoVM)&#xff0c;这要求开发者学习 …

多态的体现

多态&#xff1a;当不同的对象去完成某个行为时会产生出不同的状态多态体现&#xff1a; 在代码运行时&#xff0c;当传递不同类对象时&#xff0c;会调用对应类中的方法。 public class Animal {String name;int age;public Animal(String name, int age){this.name name;t…

docker安装、设置非sudo执行、卸载

安装 sudo snap install docker 设置docker非sudo执行 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock 卸载docker 1.删除docker及安装时自动安装的所有包 apt-get autoremove docker docker-ce docker-…

Java之多线程的实现(创建)(3种实现方式)(面试高频)

目录 一、多线程的3种实现方式 &#xff08;1&#xff09;继承Thread类。 &#xff08;2&#xff09;实现Runnable接口。&#xff08;void run()&#xff1a;该方法无返回值、无法抛出异常&#xff09; &#xff08;3&#xff09;实现Callable接口。&#xff08;V call() throw…

Linux补基础之:网络配置

目录 一、检查主机与虚拟机是否能正常通信 二、网络的连接模式 桥接模式 流程 特点 NAT模式 流程 特点 仅主机 流程 特点 三、修改静态IP 四、可能遇到的问题 防火墙 DNS 五、主机名更改 六、登录服务器 实际的大数据管理中&#xff0c;会有由很多服务器构成的…