javascript - 正则表达式让我感到困惑,为什么它不能正确解析?

标签 javascript jquery regex

抱歉,标题令人困惑。一般来说,我是 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);
    }
});

目前,它不允许任何东西通过。

最佳答案

您的正则表达式有几个问题。

  1. 您想替换与您的列表匹配的字符。为此,您使用 ^ 开始您的字符类 ([])。

  2. 您不需要在正则表达式中转义+*。不过,您确实需要将 - 移动到开头或结尾。

  3. 您不需要在字符类之后的 *$。删除这些,您将替换任何不匹配的字符,无论它出现在字符串中的什么位置。

  4. 如果您的字符串包含多个字符(此处可能不适用),在末尾添加一个 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/

相关文章:

regex - 将字符串替换为 R 中的数字函数

python - 如何在 Python 中匹配字符串或字符的开头

javascript - Firebase + backbone : difference between collection. create() 和 collection.push()?

javascript - 数据库未更新错误 - Entity Framework

javascript - 创建一个干净的函数

javascript - 从 localStorage 对数组运行 for 循环

javascript - 如何将字符串与 Javascript 中的模式数组进行匹配?

javascript - 如何使用 Gulp 和 Browserify 初始化 Flux 数据?

javascript - 无法将 Google 脚本中的分页符添加到通过 for 循环创建的项目中

javascript - 在 jquery 就绪调用函数中应用鼠标悬停代码