Javascript常规exp无法正常工作

时间:2014-04-18 08:31:39

标签: javascript regex

我写了这个用于验证密码的JS代码,不能包含(!)char。

小提琴:http://jsfiddle.net/sr8xm/

var pattern = /[A-Za-z0-9.#&@_-]{6,20}/;

$("#pwd").blur(function(){
        pwd = $(this).val();
        if(!pattern.test(pwd)){
            alert('Please enter valid new password.');      
            return false;
        }
});

但如果有人输入,则返回true! 6个字符后的字符? 不知道这出了什么问题。

3 个答案:

答案 0 :(得分:2)

锚定你的正则表达式:

var pattern = /^[A-Za-z0-9.#&@_-]{6,20}$ /;

您还可以将其缩小为:

var pattern = /^[\w.#&@-]{6,20}$/;

答案 1 :(得分:1)

/[A-Za-z0-9.#&@_-]{6,20}/可以匹配密码字符串的中间部分。例如,它匹配“!mypassword!”并返回true。您可以使用^(匹配字符串的开头)和$(匹配字符串的结尾),例如/^[A-Za-z0-9.#&@_-]{6,20}$/

答案 2 :(得分:0)

如果要限制所选字符,可以使用另一个表达式来检查受限字符的存在。但锚定正则表达式也是你的问题的快速解决方案

    var pattern = /[A-Za-z0-9.#&@_-]{6,20}/g;
    var restrictedChar =/[!]+/g;  // Add more character here which u want to restrict
    var pwd = $("#pwd").val();

    if(!pattern.test(pwd) || restrictedChar.test(pwd)){
        alert('Please enter valid new password.');      
        return false;
    }

Demo