首页 > 解决方案 > Jquery 验证和正则表达式

问题描述

我知道这个问题已经被问死了,但似乎没有一个答案有效,所以不知道是插件问题还是我的代码。我正在使用 JQuery Validate 插件并检查了正则表达式的文档,并且确定我的一切都是正确的。但是,当我输入 test1234 或 TEST1234 作为密码时,当我明确表示我想要 1 个大写字母、1 个小写字母、1 个数字和 8-12 个字符时,验证插件似乎接受了这个密码。具有讽刺意味的是,当我输入 7 个字符的密码时,它会触发,如果我只使用数字并匹配 8 个字符,它就会触发。

有人可以仔细检查我下面的代码是否正常?我还尝试了以下方法:

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,12}$
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,12}$



<!--
(                   # Start of group
(?=.*\d)        #   must contain at least one digit
(?=.*[A-Z])     #   must contain at least one uppercase character
(?=.*\W)        #   must contain at least one special symbol
   .            #   match anything with previous condition checking
{8,12}          #   length at least 8 characters and also maximum of 12
)               #   End of group

 -->


 $().ready(function () {

$.validator.addMethod("PASSWORD", function (value, element) {
  return this.optional(element) || /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,12}$/i.test(value);
}, "Passwords are 8-12 characters with uppercase letters, lowercase letters and at least one number.");

// Validate signup form on keyup and submit
$("#cp").validate({
    rules: {
      new_pass1: "required PASSWORD",
      new_pass2: {required: true, equalTo: "#new_pass1"}
  },
});
});

标签: jqueryregex

解决方案


只需删除i标志。'i' 标志启用不区分大小写的搜索。所以应该是:

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

检查这个:https ://jsfiddle.net/djanym/0xrkgnsL/12/


推荐阅读