正则表达式验证规则

时间:2012-01-31 20:31:02

标签: javascript regex validation

我正在编写数据库备份功能,作为我学校项目的一部分。

我需要编写一个正则表达式规则,因此数据库备份名称只能包含合法字符。

'legal'是指不包含任何符号或空格的字符串。只有字母和数字的字母。

有效字符串的示例为'31Jan2012''63927jkdfjsdbjk623''hello123backup'

到目前为止,这是我的JS代码:

    // Check if the input box contains the charactes a-z, A-Z ,or 0-9 with a regular expression.

    function checkIfContainsNumbersOrCharacters(elem, errorMessage){
        var regexRule = new RegExp("^[\w]+$");
        if(regexRule.test( $(elem).val() ) ){ 
            return true;
        }else{
            alert(errorMessage);
            return false;
        }
    }


//call the function

checkIfContainsNumbersOrCharacters("#backup-name", "Input can only contain the characters a-z or 0-9.");

我之前从未真正使用正则表达式,但是经过一段谷歌搜索后我找到了this工具,我从中编写了以下正则表达式规则:

^[\w]+$

^ =字符串的开头

[/ w] = a-z / A-Z / 0-9

'+'=字符串后的字符。

运行我的函数时,我输入的任何字符串似乎都返回false :(我的代码是错误的?还是我没有正确使用正则表达式规则?

5 个答案:

答案 0 :(得分:2)

当您将正则表达式声明为RegExp构造函数的字符串参数时,您需要将其转义。两者

var regexRule = new RegExp("^[\\w]+$");

...和...

var regexRule = new RegExp(/^[\w]+$/);

会奏效。

请记住,数据库数据的客户端验证永远不够,因为通过在浏览器中禁用javascript可以轻松绕过验证,并且无效/恶意数据可以到达您的数据库。您需要在服务器端验证数据,但是使用无效数据阻止请求,但验证客户端是一种很好的做法。

答案 1 :(得分:2)

\w是[[:alnum:]]的同义词,它与alnum类的单个字符匹配。请注意,使用字符类意味着您可以匹配不属于ASCII字符编码的字符,这些字符可能是您想要的,也可能不是。如果您真正想要匹配的是[0-9A-Za-z],那么您应该使用它。

答案 2 :(得分:2)

它可以更简单。这有效:

function checkValid(name) {
  return /^\w+$/.test(name);
}

/^\w+$/new RegExp()的字面符号。由于.test函数返回一个布尔值,因此您只需返回其结果。这也比new RegExp("^\\w+$")读得更好,并且你不太可能搞砸(感谢@ x3ro指出字符串中需要两个反斜杠)。

答案 3 :(得分:2)

这里的问题是,在字符串中编写\w时,您将转义w,生成的正则表达式如下所示:^[w]+$,其中包含w作为文字字符。在创建带有传递给RegExp构造函数的字符串参数的正则表达式时,您需要转义反斜杠,如下所示:new RegExp("^[\\w]+$"),这将创建所需的正则表达式。

有一种方法可以避免这种情况,使用JavaScript提供的简写符号:var regex = /^[\w]+$/;,不需要任何额外的转义。

答案 4 :(得分:1)

这是官方规范:http://dev.mysql.com/doc/refman/5.0/en/identifiers.html但它不是很容易转换为正则表达式。只是正则表达式不会这样做,因为还有reserved words

为什么不把它放在查询中(不要忘记正确地逃避它)并让MySQL给你一个错误?例如,您正在使用的MySQL版本中可能存在错误,即使您的检查正确,MySQL仍可能拒绝。