RegExp.Test总是返回false

7
我在JSfiddle上有以下代码: http://jsfiddle.net/ACG2D/
$(document).ready(function() {
    $('.testThis').click(function() {
        $('.regexValidation').each(function() {
            if ($(this).val() != "" || $(this).val() != null) {
                // Check the regex
                var expression = new RegExp('/^[0-9a-z_]+$/i');
                var myVal = $(this).val();
                if (expression.test(myVal) == true) {
                    // All is okay
                    alert("OK");
                } else {
                    alert("Error");
                }
            }
        });
    });    
});

计划只允许字母数字和下划线通过。禁止空格和标点等。

我不知道为什么出错了,但它总是返回测试结果为false。

4个回答

13
您的语法有误。
更改为var expression = /^[0-9a-z_]+$/i; 与PHP不同,Javascript支持正则表达式字面量,语法/.../创建一个RegExp对象。
RegExp构造函数将正则表达式作为字符串输入,没有分隔符。因此,您也可以写成new RegExp('^[0-9a-z_]+$', 'i')

嗯...每天都有新的学习!我以为缺少引号会导致JS抛出错误,但显然不是这样。感谢您的答案和解释。 - Dave
谢谢,这个帮了我大忙,但是你也应该去掉每个文字字面中的空格。我试图做这个:[ #,% ] 但总是返回false。那么真正的表达式是没有空格的,也就是说:[#,%]。希望这能帮助未来的其他人。(y) - RogerEdward

10

从您的正则表达式中删除引号:

var expression = new RegExp(/^[0-9a-z_]+$/i);

2

像这样去掉引号:new RegExp(/^[0-9a-z_]+$/i);


@Igor Dymov和@Mrchief:使用new RegExp(/ /)而不是/ /有什么优势吗? - pimvdb

0

在正则表达式的开头和结尾使用斜杠“/”而不是引号。

对于您的代码,应该像这样 -

var expression = new RegExp(/^[0-9a-z_]+$/i);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接