0

我在使用正则表达式时遇到问题,无法获得要验证的值。

我有这样的功能:

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

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

\d+

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

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

如果我检查验证对象,我会看到 Chrome 已将正则表达式更改为 /d+/ 。我尝试将其设置为正则表达式类型,但它也不起作用。这确实适用于文本字段。在我看来,所有反斜杠都被转换为其他东西。

我也试过转义反斜杠,但浏览器只接受文字值。

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

此致,

博耶德

4

1 回答 1

1

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

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

由于您正在传递,因此背框需要\d+转义,因此您应该\\d+对构造函数进行处理。
上面的正则表达式转义了所有特殊字符 AFAIK。我冒昧地从这里复制了表达式。
创建表达式的另一种更简单的方法是使用文字表示法,它更常见,更符合JS,并且不易出错:

var expr = /\d+/;

根本不需要转义字符串。

顺便说一句,您可以在控制台中轻松检查这一点: '\d'"d"在 chrome 控制台中评估为,因此传递'\d+'RegExp评估为new RegExp('d+'),这是一个有效的正则表达式,因此不会引发错误,它只是不做同样的事情。

不过,附带说明一下:您能否准确说明您的函数的目标是什么,因为它不是构造函数(如果是,它的名称应该以UpperCase字母开头),而且我认为您不完全理解this参考可以/将在你的情况下做

于 2013-08-13T09:09:38.683 回答