2012-10-23 25 views
0

我有一些jQuery验证代码,必须通过一些Selenium测试。但是,每次运行测试时,不同的测试都会失败,并且不同的测试通过。例如,在一次测试中,缩短密码将失败并且密码过长。但是,如果我重新运行测试,则可能会发生相反的情况!jQuery /正则表达式失败硒IDE测试

这是正则表达式:

var password = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*(_|[[email protected]#$%^&*.,?])).{6,20}$/; 

这是jQuery的:

if($('#password').val() ==""){ 
$('#passwordErrorMsg').text("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 if(password.test($('#password').val())){  
$('#passwordErrorMsg').text("OK"); 
}  
else($('#passwordErrorMsg').text("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.")); 
}); 

在经过Selenium测试将是有益的和感激,感谢任何帮助。

+0

@roasted,我认为正则表达式是正常的......它只是用向前检查每个必要的符号,然后测试字符串长度。 @ user1766599。你可以从你的第四个前瞻中删除'_ |'。它应该由角色类来照顾。 (虽然这不会解决你的问题)。此外,你最lasst的错误信息不适合正则表达式。你的正则表达式需要一个数字**和**符号。 –

+0

好的,我没看过“它必须包含大写和小写字母的混合体,并且至少包含一个数字或符号。” ... –

回答

0
/^((?<lowerCase>[a-z])|(?<upperCase>[A-Z])|(?<numberOrSymbol>[[email protected]#$%^&*.,?-])){6,20}(?(lowerCase)|(?!))(?(upperCase)|(?!))(?(numberOrSymbol)|(?!))$/ 

从行首开始。

以小写字母或大写字母或NumberOrSymbol取6-20次,同时计算每种类型的出现次数。

验证每种类型至少发生过一次。

验证我们是否在行的末尾。

关于问题中提供的正则表达式的注意事项:它验证是否存在所需的符号,但并不要求pwd中的所有字符属于其中一个“陈述”类,它会接受字符串“ aA3 @ \\“,这可能不是作者想要的可接受的密码。