Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 密码验证不起作用_Javascript_Jquery_Regex_Forms_Validation - Fatal编程技术网

Javascript 密码验证不起作用

Javascript 密码验证不起作用,javascript,jquery,regex,forms,validation,Javascript,Jquery,Regex,Forms,Validation,我使用下面的正则表达式使用jQuery验证来验证我的密码 $.validator.addMethod("passwordTest", function(value, element) { return this.optional(element) || /^(?=.*\d)[0-9a-zA-Z\!\@\#\$\%\^\&\*\)\(\+\=\.\_\-\?\}\{\]\[\>\<\"\\\/\'\:\;]{8,}$/i.test(value);

我使用下面的正则表达式使用jQuery验证来验证我的密码

$.validator.addMethod("passwordTest", function(value, element) {
            return this.optional(element) || /^(?=.*\d)[0-9a-zA-Z\!\@\#\$\%\^\&\*\)\(\+\=\.\_\-\?\}\{\]\[\>\<\"\\\/\'\:\;]{8,}$/i.test(value);
        }, _objPropertiesMsg.passWeak);
它一直工作到8个字符,但超过8个字符时所有验证都失败。
此外,它无法连续进行2次字符检查,只接受8个数字。

我想,尝试在一个正则表达式中检查所有条件通常不是一个好主意

相反,只需使用纯javascript检查长度,让一个正则表达式检查一行中出现的字符不超过两次,另一个正则表达式确保至少有一个数字后跟一个非数字,或者相反:

$.validator.addMethod("passwordTest", function(value, element) {
            return this.optional(element) || value.length>=8 && /^((.)\2?(?!\2))+$/i.test(value) && /(\d[^\d]|[^\d]\d)/.test(value);
        }, _objPropertiesMsg.passWeak);

请在

的概念验证处参观织机,谢谢您的回复。它还具有特殊的性质。比如说@测试12和@Test12测试应该失败。我又添加了一个条件/^[a-zA-Z0-9]+$/I..test(值)。很好,我不是第一次得了这种病。但是,要使这一点起作用,你不必再添加其他条件。只需将
()
替换为
[a-z0-9]
,就可以只匹配字母数字字符串。证据:。。。使用
i
-修改器(使匹配不区分大小写)时,表达式中不需要
A-Z
A-Z
。一个就足够了,可以让它不那么复杂。另外:您可能需要重新考虑不允许使用特殊字符的决定。安全方面,允许它们是有意义的。请检查此链接-RegEx。。。
$.validator.addMethod("passwordTest", function(value, element) {
            return this.optional(element) || value.length>=8 && /^((.)\2?(?!\2))+$/i.test(value) && /(\d[^\d]|[^\d]\d)/.test(value);
        }, _objPropertiesMsg.passWeak);