• 正则表达式


    语法

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

    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() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

    1. var str = 'xiao hong'
    2. var n = str.search(/h/i)
    3. console.log(n) //返回索引:5

    replace() 

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

    1. var str = 'xiao hong'
    2. var txt = str.replace(/hong/i'ming')
    3. console.log(txt) // xiao ming

    test()

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

    1. var patt1 = new RegExp("e");
    2. console.log(patt1.test("hello")); //true

    exec()

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

    1. var patt2 = new RegExp("e");
    2. console.log(patt2.exec("hello")); 
    3. //[ 'e', index: 1, input: 'hello', groups: undefined ]

    案例1:

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

    [] 表示一个字符集合,它匹配方括号内的任何一个字符。

    ^ 在字符集合内部使用表示否定,即匹配除了后面指定字符之外的任何字符。

    \u4e00-\u9fa5 是Unicode编码范围,包括了所有常用的中文汉字

     案例2:

    常见手机号验证: /^[1][3-9]\d{9}$/
    1. "phoneNumber" @blur="validatePhone">
    2. <span v-if="phoneError" style="color: red;">请输入有效的手机号span>
    3.  phoneNumber'',
    4.  phoneErrorfalse,
    5.  validatePhone() {
    6.       const reg = /^[1][3-9]\d{9}$/
    7.       if (!reg.test(this.phoneNumber)) {
    8.         this.phoneError = true
    9.       } else {
    10.         this.phoneError = false
    11.       }
    12.  },

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

    [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

    {{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 的字符串

    1. function validateIDNumber(idNumber) {
    2. // 正则表达式匹配身份证号码的基本结构
    3. var idPattern = /^\d{17}[\dX]$/;
    4. if (!idPattern.test(idNumber)) {
    5. return false; // 如果不符合基本结构,直接返回false
    6. }
    7. // 提取出生日信息
    8. var year = idNumber.substring(6, 10);
    9. var month = idNumber.substring(10, 12);
    10. var day = idNumber.substring(12, 14);
    11. var birthday = new Date(year, parseInt(month, 10) - 1, day);
    12. // 检查生日是否合法
    13. if (
    14. birthday.getFullYear() != year ||
    15. birthday.getMonth() + 1 != month ||
    16. birthday.getDate() != day
    17. ) {
    18. return false;
    19. }
    20. // 校验码校验
    21. var idArray = idNumber.split("");
    22. var factorArr = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    23. var checkCodeArr = [
    24. "1",
    25. "0",
    26. "X",
    27. "9",
    28. "8",
    29. "7",
    30. "6",
    31. "5",
    32. "4",
    33. "3",
    34. "2"
    35. ];
    36. var checkSum = 0;
    37. for (var i = 0; i < 17; i++) {
    38. checkSum += parseInt(idArray[i]) * factorArr[i];
    39. }
    40. if (idArray[17].toUpperCase() != checkCodeArr[checkSum % 11]) {
    41. return false;
    42. }
    43. return true; // 如果通过了以上所有检验,返回true
    44. }
    45. // 使用例子:
    46. var idNumber = "320125199001011234";
    47. console.log(validateIDNumber(idNumber)); // 输出 true 或 false

    ^:匹配输入的开始位置。
    \d{17}:匹配包含17个数字的字符串。\d表示匹配任意数字,{17}表示前面的数字必须连续出现17次。
    [\dX]:匹配最后一个字符是数字或者大写字母 X。
    $:匹配输入的结束位置。

  • 相关阅读:
    掌动智能:替代JMeter的压力测试工具有哪些
    Illegal key size问题
    分布式计算模型Mapreduce实践与原理剖析(二)
    什么是线程池?
    压缩文件的自动加密怎么解除
    linux之shell
    Resultf风格接口
    麒麟KYLINOS2303系统上禁用新功能介绍页面
    正则系列之手机号码正则
    【Harbor作为Chart仓库】Helm离线部署AWX1.0.0
  • 原文地址:https://blog.csdn.net/weixin_58431406/article/details/134314029