2012-10-06 235 views
3

要么我在这里真的被推迟,要么就是缺乏睡眠,但为什么这种方式不起作用?如果我使用“或”运算符,它可以用于每个单独的测试,但只要将它更改为“和”运算符,它就会停止工作。用Jquery检查大写字母/小写字母/数字

我想测试一个窗体的密码输入,看看它是否包含小写,大写和至少1个符号数。我遇到了很多麻烦,所以帮助很可爱,这里是我的代码。

var upperCase= new RegExp('[^A-Z]'); 
var lowerCase= new RegExp('[^a-z]'); 
var numbers = new RegExp('[^0-9]'); 

if(!$(this).val().match(upperCase) && !$(this).val().match(lowerCase) && !$(this).val().match(numbers))  
{ 
    $("#passwordErrorMsg").html("Your password must be between 6 and 20 characters. It must contain a mixture of upper and lower case letters, and at least one number or symbol."); 
} 
else 
{ 
    $("#passwordErrorMsg").html("OK") 
} 

回答

11

您所有的正则表达式正在搜索什么除了您所提供的范围。所以,[^ A-Z]除了A-Z之外什么都找不到。

你也否定每场比赛。

您可以尝试修改您的正则表达式定义,方法是移除^,然后颠倒逻辑。所以,

var upperCase= new RegExp('[A-Z]'); 
var lowerCase= new RegExp('[a-z]'); 
var numbers = new RegExp('[0-9]'); 

if($(this).val().match(upperCase) && $(this).val().match(lowerCase) && $(this).val().match(numbers)) 
{ 
    $("#passwordErrorMsg").html("OK") 

} 
else 
{ 
    $("#passwordErrorMsg").html("Your password must be between 6 and 20 characters.  It must contain a mixture of upper and lower case letters, and at least one number or symbol."); 
} 

这甚至可能会更直观一些?

+0

完美,工作!非常感谢。此外,我必须检查另一个输入字段与无效字符,RegExp会是什么?像,括号之间的位? – user1725794

+0

new RegExp('[^ abc]'); b和c是你想标记为无效的字符。请记住用反斜杠转义特殊字符。这是一个很好的正则表达式参考http://www.regular-expressions.info/reference.html – thelastshadow

0
var upperCase= new RegExp('[A-Z]'); 
var lowerCase= new RegExp('[a-z]'); 
var numbers = new RegExp('[0-9]'); 

if($(this).val().match(upperCase) && $(this).val().match(lowerCase) && $(this).val().match(numbers) && $(this).val().lenght>=6 && $(this).val()<=20) 
{ 
    $("#passwordErrorMsg").html("OK") 

} 
else 
{ 
    $("#passwordErrorMsg").html("Your password must be between 6 and 20 characters.  It must contain a mixture of upper and lower case letters, and at least one number or symbol."); 
} 
相关问题