Javascript中动态RegExp构造的问题

时间:2010-09-19 07:31:50

标签: javascript jquery regex user-input

此方法是为了防止用户输入除数字和“允许的字符”之外的任何内容。允许的字符作为参数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解决方案也很好)

1 个答案:

答案 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) {
      ...