此方法是为了防止用户输入除数字和“允许的字符”之外的任何内容。允许的字符作为参数allowedchars
传递。
到目前为止,该方法会阻止数字输入,但允许的查询不起作用(尝试传递“ - ”(连字符)和“。”(句点))。所以我假设我的动态正则表达式构造不正确。救命?
提前致谢!
numValidate : function (evt, allowedchars) {
var theEvent, key, regex,
addToRegex = allowedchars;
theEvent = evt || window.event;
key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
var regex = new RegExp('/^[0-9' + addToRegex + ']$/');
if (!regex.test(key)) {
theEvent.returnValue = false;
if (theEvent.preventDefault) {
theEvent.preventDefault();
}
}
}
(ps.jQuery解决方案也很好)
答案 0 :(得分:2)
1。当您通过new RegExp
构建时,无需包含周围的/
。
var regex = new RegExp('^[0-9' + addToRegex + ']$');
2。但如果addToRegex
包含]
或-
,则生成的正则表达式可能会变得无效或匹配太多。所以你需要逃脱它们:
var regex = new RegExp('^[0-9' + addToRegex.replace(/([\-\]])/g, '\\$1') + ']$');
3。但是,无论如何你要检查1个字符,避免正则表达式可能更容易。
var pass = ("0123456789" + addToRegex).indexOf(key);
if (pass == -1) {
...