好吧,我有以下要求:
- 最少8个字符
- 至少包含一个大写字母
- 至少包含一个小写字母
醇>
^(?=.*[a-z])(?=.*[A-Z]){8,}$
但即使没有满足要求,它也总是返回true。可能有人建议出了什么问题吗?
答案 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
语句来检查条件,您的代码会更好看。这种编码风格的另一个优点是,您可以生成提示消息,告诉最终用户出了什么问题。而不是一般的错误消息。