采用一个javascript类,其中有很多代码示例,但没有大量解释它是如何工作的。我思考我对各种操作符和标准函数有了深刻的理解,但下面的else if
语句让我感到难以置信。有人可以请一点点,谢谢。
function validatePassword(password) {
try {
if (document.forms[0].password.value != document.forms[0].password_confirm.value)
throw "You did not enter the same password.";
else if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$/.test(password))
throw "You did not enter a valid password.";
}
具体来说:
(!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$/.test(password))
答案 0 :(得分:2)
分解
!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$/.test(password)
/.../.test(password)
正在检查password
的字符串值是否与左侧的regular expression匹配。
.{6,15}
要求password
长度介于6到15个UTF-16代码单元之间,并且只包含非换行符。
(?=.*\d)
是lookahead,仅在字符串中有数字时匹配。 .*\d
表示任意行字符(*
)的0或更多(.
),后跟数字\d
。
(?=.*[a-z])
和(?=.*[A-Z])
同样需要至少一个小写ASCII字母和一个大写字母。
答案 1 :(得分:2)
这是一个正则表达式(正则表达式)。字符:
(
打开paren,这里没什么大不了的。!
“不是”操作员,否定接下来的内容。 /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$/
大讨厌的正则表达式。进一步打破这一部分(忽略斜线,因为它们只是分隔符):
^
必须匹配给定字符串的开头。(?=.*\d)
向前看;检查零个或多个字符然后检查一个数字。基本上,确保密码至少有一位数。(?=.*[a-z])
另一个先行;检查零个或多个字符,然后检查小写字母,确保密码至少包含一个小写字母。(?=.*[A-Z])
第三个先行;这个确保密码至少包含一个大写字母。.{6,15}$
匹配6到15次之间的任何字符,然后匹配字符串的结尾。由于我们自开始锚点(^
)以来所做的一切都是先行,因此实际上还没有消耗任何字符。如果我们不需要确认上/下/数字,我们可以写^.{6,15}$
,它将匹配长度为6到15个字符的任何字符串(包括)。
.test(password)
之前的混乱创建了一个RegExp
对象。现在我们调用test()
方法,传入我们的密码。如果正则表达式匹配(即密码符合我们的要求),则返回true
;如果密码失败,则返回false
。)
关闭paren。简单但重要。