验证@字符出错了

时间:2017-04-17 03:14:08

标签: javascript jquery regex

我使用javascript进行密码验证:

$.validator.addMethod('mypassword', function(value, element) {
    return this.optional(element) || (value.match(/^(?=.*\d)(?=.*[A-Z])[0-9a-zA-Z]{8,}$/));
},
'Password must contain at least one numeric and one uppercase alphabetic character.');

我需要密码至少是一个数字和一个大写字母字符。但是,如果我输入密码中带有一个数字和一个大写字母字符的@, # ,$等字符,它仍会显示错误消息。

Password9 accepted
Password@1 not accepted 

3 个答案:

答案 0 :(得分:1)

正则表达式中的这部分不允许@

[0-9a-zA-Z]

如果您不想要任何限制,请将[0-9a-zA-Z]{8,}更改为.{8,}

答案 1 :(得分:1)

根据您的正则表达式,您的密码必须包含至少8个字母数字字符,而不包含任何其他字符。您的第二个密码与此条件不符。尝试

/^(?=.*\d)(?=.*[A-Z]).{8,}$/

但我不确定这是你想要的,因为你可能想限制允许的字符集以避免,例如像äöü这样的非英文字母。

您可能希望列出所有允许的字符,例如

/^(?=.*\d)(?=.*[A-Z])[0-9a-zA-Z\%\&\/\$\@\#]{8,}$/

或尝试指定unicode范围:

Javascript + Unicode regexes

答案 2 :(得分:1)

(function(){  
       var regex=/^(?=.*\d)(?=.*[A-Z])[!-~]{8,}$/;	   
	   var arr=["Password9","Password@1","password@1"];
	   for(var i=0;i<arr.length;i++){
		   console.info(arr[i]+"\t"+(regex.test(arr[i])?"accepted":"not accepted"));
	   }   
    })(); 

试试吧