抱歉,标题令人困惑。一般来说,我是 Regex 和 JS/JQ 的新手。但是,我正在尝试解析它。基本上,我希望它在且仅当按下键 0-9 和键 +、-、/和 * 时将按下的键添加到 HTML。任何帮助将非常感激。这是我的代码:
function charCode(code) {
return String.fromCharCode(code);
}
function escapeChars(esc) {
return esc.replace(/[0-9\+-\*\/]*$/, "");
}
$('#tb').html("0");
$(document).on("keydown", function(event) {
var div = $('#tb');
var which = event.which;
which = charCode(which);
which = escapeChars(which);
else if (div.html() == "0") {
//alert("Div is equal to 0."); --Debug
div.html(which);
} else {
//alert("Div is equal to " + div.html()); --Debug
div.html(div.html() + which);
}
});
目前,它不允许任何东西通过。
最佳答案
您的正则表达式有几个问题。
您想替换不与您的列表匹配的字符。为此,您使用
^
开始您的字符类 ([]
)。您不需要在正则表达式中转义
+
或*
。不过,您确实需要将-
移动到开头或结尾。您不需要在字符类之后的
*
或$
。删除这些,您将替换任何不匹配的字符,无论它出现在字符串中的什么位置。如果您的字符串包含多个字符(此处可能不适用),在末尾添加一个
g
标记将允许您替换所有 个字符不匹配。
这会产生如下所示的正则表达式:
/[^0-9+*\/-]/g
这个 fiddle 显示了上面的正则表达式的工作:http://jsfiddle.net/WyttT/
已更新
您遇到的另一个问题是由检查 keydown
事件中的键码引起的。 keydown
上的键码 do not match to actual ascii character codes ,所以非字母数字键被转换成奇怪的字符。如果您更改偶数处理程序以响应keypress
,您将获得更好的结果。
关于javascript - 正则表达式让我感到困惑,为什么它不能正确解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246990/