[英]Reverse engineering a JavaScript RegExp
以一个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)(?=.*[az])(?=.*[AZ]).{6,15}$/.test(password))
这是一个正则表达式(regex)。 逐个字符:
(
打开括号,这里没有什么棘手的问题。 !
“非”运算符,否定下一步。 /^(?=.*\\d)(?=.*[az])(?=.*[AZ]).{6,15}$/
大讨厌的正则表达式。 进一步扩展此部分(忽略斜线,因为它们只是定界符):
^
必须匹配给定字符串的开头。(?=.*\\d)
向前看; 检查零个或多个字符,然后检查数字。 基本上,请确保密码至少包含一位数字。(?=.*[az])
再次向前看; 检查零个或多个字符,然后检查小写字母,以确保密码至少包含一个小写字母。(?=.*[AZ])
第三次前瞻; 该密码可确保密码至少包含一个大写字母。.{6,15}$
匹配6到15次之间的任何字符,然后匹配字符串的结尾。 由于自开始锚(^
)以来我们所做的所有工作都是超前的,因此实际上尚未消耗任何字符。 如果我们不需要确认大写/小写/数字,我们可以只写^.{6,15}$
,它可以匹配长度在6到15个字符之间的字符串。
.test(password)
先前的混乱创建了一个RegExp
对象。 现在,我们调用test()
方法,并传入密码。 如果正则表达式匹配(即密码符合我们的要求),则返回true
如果密码失败,则返回false
。 )
关闭括号。 简单但重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.