js \d正则匹配数字失败问题记录

记录一次的正则匹配数字失败的问题

在一次开发中,需要匹配卡号,正则表达式较为复杂,想通过元字符进行简化,便由:

new RegExp('^622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[01][0-9]|92[0-5])[0-9]{10,}$')

变成:

new RegExp('^622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5])\d{10,}$')

发现修改后,无论如何都匹配不上了

结论

最后发现,js创建正则表达式有两种方式:

  1. 字面量形式
  2. 构造函数

当通过构造函数进行匹配时,需要符合字符转义规则。因此,当使用\d元字符通过构造函数进行正则表达式生成时,需要加上"\"(反斜杠),对元字符中的反斜杠进行转义。即:

let a = new RegExp("\d")     // a.test(1) === false
let b = new RegExp("\\d")    // b.test(1) === true
let c = new RegExp(/\d/)     // c.test(1) === true
let d = /\d/                 // d.test(1) === true

所以,将原先的正则修改成

 new RegExp('^622(12[6-9]|1[3-9]\\d|[2-8]\\d{2}|9[01]\\d|92[0-5])\\d{10,}$')

 new RegExp(/^622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5])\d{10,}$/)

/^622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5])\d{10,}$/

就ok了!当然,最开始提到的正则也是可以用的。

其实,该问题其实在教程里也是有提到的,还是需要打牢基础~
附上本次正则校验的规则,要是有更好的建议也可以提出~

本文链接:https://my.lmcjl.com/post/12960.html

展开阅读全文

4 评论

留下您的评论.