我的正则表达式总是返回true

时间:2018-02-20 04:18:03

标签: regex

好吧,我有以下要求:

  
      
  1. 最少8个字符
  2.   
  3. 至少包含一个大写字母
  4.   
  5. 至少包含一个小写字母
  6.   
^(?=.*[a-z])(?=.*[A-Z]){8,}$

但即使没有满足要求,它也总是返回true。可能有人建议出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

您在量词之前缺少.

/(?=.*[a-z])(?=.*[A-Z]).{8}/应该完成这项工作。

示例:

var check = /^(?=.*[a-z])(?=.*[A-Z]).{8}$/

var correctInput = "abcdefgH";
var incorrectInput = "agH";

if (check.exec(correctInput)) {
    console.log("correct input: pass");
}

if (!check.exec(incorrectInput)) {
    console.log("incorrect input: pass");
}

虽然建议的正则表达式有效并且看起来很花哨,但我反对它,特别是在这种情况下。

在代码可读性和可维护性方面,我认为通过使用一些if-else语句来检查条件,您的代码会更好看。这种编码风格的另一个优点是,您可以生成提示消息,告诉最终用户出了什么问题。而不是一般的错误消息。