Regex让我很困惑,为什么会赢'它不能正确解析
Regex is confusing me and why won't it parse properly?
很抱歉标题混淆了。我是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
上的键代码与实际的ascii字符代码不匹配,因此非字母数字键被转换为奇怪的字符。如果您将偶数处理程序改为响应keypress
,您将获得更好的结果。
我认为您不需要正则表达式。我认为charAt()会更简单地做你想做的事。
你有个性。您有一个匹配或不匹配的字符列表。charAt()可以简单有效地完成此操作。
既然jcsanyi已经帮助您使用regex,下面是对JS代码的简化。Codepen
您需要使用keypress而不是keydown/keyup,否则您的numpad将返回错误的键,并且任何需要移位的键(例如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);
}
});
- 为什么在这个网站上不能通过JS访问元素
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- 为什么这个代码不能正常工作
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- 为什么Turbolinks不能正常工作?Rails应用程序
- 为什么错误不能字符串化
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作
- 为什么动态加载的事件在我的代码中不能正常工作
- 为什么数据不能't显示在查看页中
- 为什么我不能使用jQuery.parseJSON(json)解析json字符串
- (为什么)我不能从生成器中抛出异常吗
- 为什么我不能在'show.bs.modal'
- 为什么竞争不能在离子中显示(隐藏在标题下方)(离子竞争不能正常工作)
- 为什么可以对整数变量调用toString(),而不能对文字数字调用
- 为什么这个while循环不能使用AND逻辑运算符
- 为什么我不能在FancyBox中使用javascript变量
- 为什么我不能将键映射到 React 组件上
- 我可以'我不明白为什么我能;不要在JavaScript中更改蜡笔的颜色