对于令人困惑的标题感到抱歉。我是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);
}
});
目前,它不允许任何通过。
答案 0 :(得分:4)
你的正则表达式存在一些问题。
您想要替换不与您的列表匹配的字符。为此,您可以使用[]
开始角色课程(^
)。
您无需在正则表达式中转义+
或*
。您确实需要将-
移到开头或结尾。
在字符类之后,您不需要*
或$
。删除那些,你将替换任何不匹配的字符,无论它出现在字符串中的什么位置。
如果您的字符串包含多个字符(此处可能不适用),则在末尾添加g
标记将允许您替换所有字符匹配。
这会产生一个如下所示的正则表达式:
/[^0-9+*\/-]/g
这个小提琴显示上述正则表达式:http://jsfiddle.net/WyttT/
您遇到的另一个问题是检查keydown
事件中的密钥代码。 keydown
do not match to actual ascii character codes上的密钥代码,因此非字母数字键会转换为奇怪的字符。如果您更改偶数处理程序以响应keypress
,则会获得更好的结果。
答案 1 :(得分:1)
我不认为你想要一个正则表达式。我认为charAt()会更简单地做你想做的事。
你有一个角色。您有一个与之匹配或不匹配的字符列表。 charAt()简单有效地做到了。
答案 2 :(得分:1)
现在jcsanyi已经帮助你使用了正则表达式,这里简化了你的JS代码。 Codepen
您将需要使用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);
}
});