3

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

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

4

3 回答 3

4

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

  1. 您想要替换与您的列表不匹配的字符。为此,您[]需要以^.

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

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

  4. 如果您的字符串包含多个字符(此处可能不适用),g则在末尾添加一个标志将允许您替换所有不匹配的字符。

这会产生一个如下所示的正则表达式:

/[^0-9+*\/-]/g

这个小提琴显示了上面的正则表达式工作:http: //jsfiddle.net/WyttT/

更新

您遇到的另一个问题是由检查keydown事件中的键码引起的。上的键keydown 码与实际的 ascii 字符码不匹配,因此非字母数字键被转换为奇怪的字符。如果你改变你的 even 处理程序来响应keypress,你会得到更好的结果。

于 2013-06-22T03:18:48.480 回答
1

我不认为你想要一个正则表达式。我认为 charAt() 会更简单地做你想做的事。

你有性格。您有一个匹配或不匹配的字符列表。charAt() 简单而有效地做到了这一点。

于 2013-06-22T03:15:04.760 回答
1

现在 jcsanyi 已经帮助您使用正则表达式,这里是您的 JS 代码的简化。密码笔

您将需要使用 keypress 而不是 keydown/keyup,否则您的小键盘将返回错误的键,并且任何需要换档(例如shift+8= *)的东西都将不起作用。您还可以使用RegExp.test(String)来检查字符是否有效,并div.append(char)代替div.html(div.html + char).

var div = $('#tb');
$(document).on("keypress", function(event) {
  var char = String.fromCharCode(event.which);
  if (/[0-9+*\/-]/.test(char) === true) {
    div.append(char);
  }
});
于 2013-06-22T03:35:08.733 回答