正则表达式

语法

/正则表达式主体/修饰符(可选)

1.修饰符:

i 执行对大小写不敏感的匹配。

g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

m 执行多行匹配。

2.特殊符号元字符:

**.**表示匹配任意单个字符(除了换行符)

\d 任意数字 ,\d{9}:表示后面紧跟着9个任意数字,

\s 空⽩字符

\b 单词边界

^ 行开始

$ 行结尾

\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

3.区间表达式

1\] 表示第一个数字必须是1 \[0-9\] 从0到9的任意数字 \[a-z\] 从a到z的任意⼀个⼩写字⺟ \[A-Z\] 从A到Z的任意⼀个⼤写字⺟ \[\\dX\]:匹配最后一个字符是数字或者大写字母 X \[a-zA-Z\]任意⼀个大小写字⺟ \[a-zA-Z0-9\] 或 \[0-9a-zA-Z\] 任意大小写字⺟和数字 { n } 重复n次 , \\d{9}:表示后面紧跟着9个任意数字 (.{n}) 表示匹配前 n 个字符表示匹配前 n 个字符 {1 ,} 重复1次或更多次 {n,m} 重复n到m次,{2,6}匹配长度为2到6

4.量词

? 表示零次或一次

* 表示零次或多次

  • 表示至少一次或多次

search()

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

javascript 复制代码
var str = 'xiao hong'
var n = str.search(/h/i)
console.log(n) //返回索引:5

replace()

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

javascript 复制代码
var str = 'xiao hong'
var txt = str.replace(/hong/i, 'ming')
console.log(txt) // xiao ming

test()

test() 方法是一个正则表达式方法,用于检测一个字符串是否匹配某个模式

javascript 复制代码
var patt1 = new RegExp("e");
console.log(patt1.test("hello")); //true

exec()

exec() 方法是一个正则表达式方法,用于检索字符串中的正则表达式的匹配。

javascript 复制代码
var patt2 = new RegExp("e");
console.log(patt2.exec("hello")); 
//[ 'e', index: 1, input: 'hello', groups: undefined ]

案例1:

将匹配到的非汉字字符替换为空字符串(只显示汉字) : /[^\u4e00-\u9fa5]/g
html 复制代码
<div>{{ name.replace(/[^\u4e00-\u9fa5]/g, '') }}</div>

\] 表示一个字符集合,它匹配方括号内的任何一个字符。 \^ 在字符集合内部使用表示否定,即匹配除了后面指定字符之外的任何字符。 \\u4e00-\\u9fa5 是Unicode编码范围,包括了所有常用的中文汉字

案例2:

常见手机号 验证 : /^[1][3-9]\d{9}$/
javascript 复制代码
<el-input v-model="phoneNumber" @blur="validatePhone"></el-input>
<span v-if="phoneError" style="color: red;">请输入有效的手机号</span>
 phoneNumber: '',
 phoneError: false,
 validatePhone() {
      const reg = /^[1][3-9]\d{9}$/
      if (!reg.test(this.phoneNumber)) {
        this.phoneError = true
      } else {
        this.phoneError = false
      }
 },

^:表示匹配输入的开始位置。

1\]:表示第一个数字必须是1,因为中国大陆的手机号都是以1开头。 \[3-9\]:表示第二个数字可以是3到9之间的任意一个数字, \\d{9}:表示后面紧跟着9个数字。\\d表示匹配任意一个数字,{9}表示重复匹配9次,所以这部分可以匹配接下来的9位数字。 $:表示匹配输入的结束位置。

案例3:

邮箱验证 : /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/

^:表示匹配输入的开始位置。

a-zA-Z0-9._-\]+:表示匹配由大小写字母、数字、点(.)、下划线(_)或短横线(-)组成的字符串,且至少包含一个字符。 @:表示匹配邮箱地址中的@符号。 \[a-zA-Z0-9.-\]+:表示匹配由大小写字母、数字、点(.)或短横线(-)组成的字符串,且至少包含一个字符。 \\.:表示匹配邮箱地址中的点号,并使用反斜杠进行转义, \[a-zA-Z\]{2,6}:表示匹配长度为2到6的大小写字母组成的字符串,通常用来匹配邮箱地址的顶级域名,如com、org等。

案例4:

加密身份证号 : **得到**xxxxxx********xxxx

javascript 复制代码
{{certNo.replace(/^(.{6})(.*)(.{4})$/,'$1' + '*'.repeat(certNo.length - 10) + '$3',)}}
  1. certNo.replace:这是一个字符串的替换操作,其中certNo是待处理的原始身份证号码。

  2. /^(.{6})(.*)(.{4})$/:这部分是正则表达式,它匹配一个特定格式的字符串。具体来说:

    • ^ 表示匹配输入的开始位置。
    • (.{6}) 匹配任意六个字符,并将其作为第一个捕获组。
    • (.*) 匹配任意数量的字符(可能是零个),并将其作为第二个捕获组。
    • (.{4}) 匹配任意四个字符,并将其作为第三个捕获组。
    • $ 表示匹配输入的结束位置。
  3. '$1' + '*'.repeat(certNo.length - 10) + '$3':这部分是替换的内容。它由三部分组成:

    • $1 表示第一个捕获组匹配到的内容。
    • '*'.repeat(certNo.length - 10) 使用""重复若干次,以替换第二个捕获组匹配到的内容。certNo.length - 10表示要用""替换的字符数量,这里是身份证号码总长度减去固定的6和4个字符。
    • $3 表示第三个捕获组匹配到的内容。

案例5:

身份证号码验证 :/^\d{17}[\dX]$/ 匹配一个包含17位数字和最后一位数字或大写字母 X 的字符串

javascript 复制代码
function validateIDNumber(idNumber) {
  // 正则表达式匹配身份证号码的基本结构
  var idPattern = /^\d{17}[\dX]$/;

  if (!idPattern.test(idNumber)) {
    return false; // 如果不符合基本结构,直接返回false
  }

  // 提取出生日信息
  var year = idNumber.substring(6, 10);
  var month = idNumber.substring(10, 12);
  var day = idNumber.substring(12, 14);

  var birthday = new Date(year, parseInt(month, 10) - 1, day);

  // 检查生日是否合法
  if (
    birthday.getFullYear() != year ||
    birthday.getMonth() + 1 != month ||
    birthday.getDate() != day
  ) {
    return false;
  }

  // 校验码校验
  var idArray = idNumber.split("");
  var factorArr = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  var checkCodeArr = [
    "1",
    "0",
    "X",
    "9",
    "8",
    "7",
    "6",
    "5",
    "4",
    "3",
    "2"
  ];
  var checkSum = 0;
  for (var i = 0; i < 17; i++) {
    checkSum += parseInt(idArray[i]) * factorArr[i];
  }
  if (idArray[17].toUpperCase() != checkCodeArr[checkSum % 11]) {
    return false;
  }

  return true; // 如果通过了以上所有检验,返回true
}

// 使用例子:
var idNumber = "320125199001011234";
console.log(validateIDNumber(idNumber)); // 输出 true 或 false

^:匹配输入的开始位置。

\d{17}:匹配包含17个数字的字符串。\d表示匹配任意数字,{17}表示前面的数字必须连续出现17次。

\\dX\]:匹配最后一个字符是数字或者大写字母 X。 $:匹配输入的结束位置。

相关推荐
万物此臻5 分钟前
C#编写软件添加菜单栏
开发语言·c#
RongSen3330 分钟前
Python海龟绘图(Turtle Graphics)核心函数和关键要点
开发语言·python
小贾要学习31 分钟前
【C语言】贪吃蛇小游戏
c语言·开发语言·游戏
苹果酱056743 分钟前
Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
java·vue.js·spring boot·mysql·课程设计
程序员爱钓鱼1 小时前
defer关键字:延迟调用机制-《Go语言实战指南》
开发语言·后端·golang
会飞的鱼先生1 小时前
vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
前端·vue.js·git·json
免檒1 小时前
Go内存管理
开发语言·网络·golang·操作系统
CodeWithMe1 小时前
【Go】从0开始学习Go
开发语言·学习·golang
张帅涛_6661 小时前
golang 安装gin包、创建路由基本总结
开发语言·golang·gin
!win !1 小时前
uni-app项目从0-1基础架构搭建全流程
前端·uni-app