正则表达式与预期符号不匹配

时间:2015-02-18 10:59:56

标签: javascript regex

我有正则表达式只匹配数字和一些特定的符号。 /[()\-\+ \d]/g

我使用regex101.com尝试此正则表达式,它匹配所有预期的符号。

在我的应用程序中,我使用此正则表达式检查用户输入文本框是否只允许符号。这里有问题,因为根据正则表达式只允许数字,空格和()

我的代码: http://jsfiddle.net/r6e8axsr/

2 个答案:

答案 0 :(得分:1)

你需要anchor正则表达式到字符串的开头和结尾,并允许多个字符匹配。如果不这样做,只要字符串中至少有一个允许的字符,正则表达式就会成功。

if (/^[()+ \d-]*$/.test(subject)) {
    // Successful match
} else {
    // Match attempt failed
}

答案 1 :(得分:0)

嗨(聚会有点晚了),

TL;DR: 使用 var key = event.key;

问题从来不在于正则表达式本身。 在撰写本文时,您可以使用另一个事件处理程序,使用 keypress 而不是 keydown 会起作用,因为 keypress 为您提供字符代码,而不是关键代码。

但是现在不推荐使用 keypressed,所以使用 keydown 很好,但是现在 event.key 有很好的浏览器支持,所以你可以使用:

var key = event.key; 代替 var key = String.fromCharCode(event.which);

此外,代码中的 value 逻辑也不是必需的,因为 value 每次都未定义。