2

我一直在阅读和使用 JQuery 中使用的正则表达式,并且部分工作正常,但似乎没有跟踪失败的正则表达式。

我认为,具体问题与“向后看”有关。

感谢 CodeJockey 的原始方向。这是我更新的代码:

<script type="text/javascript">
  jQuery(document).ready(function($) {
   $.validator.addMethod("lccharReqs", function(value, element) {
 var lc =  /(?=.*[a-z])/;
 return this.optional(element) || lc.test(value);
   }, "Your password should contain at least one lowercase letter!");

   $.validator.addMethod("uccharReqs", function(value, element) { 
 var uc = /(?=.*[A-Z])/;
 return this.optional(element) || uc.test(value);
   }, "Your password should contain at least one uppercase letter!");

   $.validator.addMethod("nccharReqs", function(value, element) {
 var nc = /(?=.*[0-9])/;
 return this.optional(element) || nc.test(value);
   }, "Your password should contain at least one number!");

   $.validator.addMethod("speccharReqs", function(value, element) {
 var sc = /(?<=.*[\!\@\#\$\%\&\?\-\_])/;
 return this.optional(element) || sc.test(value);
   }, "Your password should contain at least one special character!");

   $("#new_noisuf_pwd").validate({
 rules: {
  inf_field_Password: {
    required: true,
    minlength: 8,
    lccharReqs: true,
    uccharReqs: true,
    nccharReqs: true,
    speccharReqs: true
  },
  pwd_confirm : {
    equalTo: "#inf_field_Password"
  }
   },
   messages: {
    inf_field_Password: {
  required: "Please enter a password!",
  minlength: "Your password must be at least 8 characters!",
      maxlength: "Your password cannot be more the 12 characters!"
},
pwd_confirm : {
  equalTo: "Your passwords does not match!"
}
   }});
  });
</script>

我倾向于“向后看”的原因是:

输入 aaaaaaaa - 我收到大写错误...输入 Aaaaaaaa - 我收到数字错误...输入 1Aaaaaaa - 我收到特殊字符错误, Enter Passw0rd - 我没有收到错误。

真的想学习这个并且已经阅读了很多,但我被困住了。

谢谢!

[原始问题] 我正在使用“验证”插件并添加如下方法:

jQuery.validator.addMethod("charReqs", function(value, element) {
                    return this.optional(element) || /^(([a-z]{1})([A-Z]{1})([0-9]{1})([\!\@\#\+\-]{1})) *$/.test(value);
                }, "One lowercase letter, one capital letter, one number and one of the characters listed above - please!");

1.) 我是否有正确的语法来检查字符串中某处的特殊字符列表中的 1 个 lc char、1 个 uc char、1 个 num 和 1 个:

/^ ( ([a-z]{1}) ([A-Z]{1}) ([0-9]{1}) ([\!\@\#\+\-]{1}) ) *$/

2.)我是否正确分组?3.) 如果不是,请解释。

谢谢

4

1 回答 1

1

逐点回答

1)不是真的,不

您的表达式指定了一个字符串,该字符串以一个小写字符开头[a-z],后跟一个大写字符[A-Z],后跟一个数字[0-9],后跟以下字符之一:!, @, #, +, -, 后跟零个或多个空格,然后字符串的结尾:-/

2) 不——没有正确分组

3)更复杂的解释:字符类([a-z],[0-9]等)足够正确(尽管{1}部分和转义\字符是多余的。但是,您需要将它们放在所谓的“前瞻”中,以匹配匹配任何后面的字符

而不是说“匹配其中之一

([a-z])

您基本上会说“向前看,看看是否可以匹配任何文本,然后是其中之一,然后回来”

(?=.*[a-z])

要匹配字符串中某处的两个字符,您可以这样做:

(?=(.*[a-z]){2})

至于整个表达式,要匹配您要查找的每个字符之一,请使用以下命令:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\!\@\#\+\-])$

要每个 要求两个或更多,您可以使用{#}符号,例如

^(?=(.*[a-z]){2})(?=(.*[A-Z]){2})(?=(.*[0-9]){2})(?=(.*[\!\@\#\+\-]){2})$

您还可以强制执行最小长度(例如 10 个字符),例如

^(?=(.*[a-z]){2})(?=(.*[A-Z]){2})(?=(.*[0-9]){2})(?=(.*[\!\@\#\+\-]){2}).{10,}$

然而

我建议将它们分成单独的表达式(我猜jQuery.validator.addMethod("...", function(...){...}, "Reason...").addMethod(...).addMethod(...).etc()每个都告诉用户缺少什么。所以你会有一个寻找小写字符,说“你需要一个小写字符”,然后一个寻找数字说“你需要一个数字”,等等......

另外,那里的特殊字符确实有限制,所以我希望你也允许一些其他的(只要提供了(?))

最后......见http://xkcd.com/936/

于 2013-10-22T20:23:44.847 回答