Chrome更改正则表达式并可以'与下拉列表中的值不匹配

Chrome changes regex and can't match with value from dropdownlist

本文关键字:下拉列表 不匹配 正则表达式 Chrome      更新时间:2023-09-26

我的正则表达式有问题,无法获得要验证的值。

我有一个这样的功能:

function validationObject(validationName, validationRegEx) {
     this.validationName = validationName;
     this.validationRegEx = validationRegEx;
}

它使用所获得的参数创建一个validationObject。对于一个包含数字的下拉列表,我有这样的regex:

'd+

但是,当我用这段代码验证这个正则表达式的值时,它不会起作用:

if (inputValue.match(validatingRegex)) {
     doSomeThings();
} 

如果我检查validationObject,我会发现Chrome已经将正则表达式更改为/d+/。我尝试过将其设置为regex类型,但也不起作用。这对文本字段有效。在我看来,所有的反斜杠都被转换成了其他的东西。

此外,我还尝试过转义反斜杠,但浏览器只接受文本值。

希望你有答案,谢谢你的帮助!

致问候,

Boyyerd

如果将特殊字符传递给RegExp构造函数,则需要转义它们:

var expr = new RegExp(somStr.replace(/['-'[']'/'{'}'(')'*'+'?'.'''^'$'|]/g, "''$&"), 'i');

由于您正在传递'd+,所以backash需要转义,因此应该''d+作为构造函数的posing
上面的正则表达式转义所有特殊字符AFAIK。我冒昧地从这里复制了这个表达方式
创建表达式的另一种更简单的方法是使用文字表示法,这种表示法更常见,在JS的调优中更,而且不太容易出错:

var expr = /'d+/;

根本不需要转义字符串。

您可以在控制台中轻松地检查这一点,btw:'''d'在chrome控制台中的计算结果为"d",因此将''d+'传递给RegExp的计算结果是new RegExp('d+'),这是一个有效的正则表达式,因此不会引发错误,只是不起同样的作用。

不过,还有一点需要注意:你能澄清一下你的函数的目标是什么吗,因为它不是构造函数(如果是,它的名称应该以UpperCase字母开头),而且我认为你还没有完全理解this引用在你的情况下

能做什么吗