<script type="text/javascript" >
function EvaluatePassword(word) {
if (word == "") {
return 0;
}
else if (word.length < 6) {
return 1;
}
else {
return word.match(/[a-z](?![^a-z]*[a-z])|[A-Z](?![^A-Z]*[A-Z])|\d(?![^\d]*\d)|[^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d])/g).length;
}
}function CheckPassword(password) {
document.getElementById("n").innerHTML = function (password) {
switch (EvaluatePassword(password)) {
case 0:
return "未输入";
case 1:
return "太简单";
case 2:
return "还可以";
case 3:
return "比较强";
case 4:
return "非常强";
}
}(password) //这个匿名函数尾巴上为啥还有个参?}
</script>
<input type="text" id="txt" onkeyup="CheckPassword(this.value)"><label id="n"></label>这个代码是我找的,两个地方看不懂:1、谁能解释下那个正则,我有点看不懂负向前瞻里面那块2、上面也提出了,函数尾巴上为啥还有个参,我看到有些函数是这种写法,哪怕里面没有参数,右大括号后也要带个括号
没有就运行不起,请问是什么原因
function EvaluatePassword(word) {
if (word == "") {
return 0;
}
else if (word.length < 6) {
return 1;
}
else {
return word.match(/[a-z](?![^a-z]*[a-z])|[A-Z](?![^A-Z]*[A-Z])|\d(?![^\d]*\d)|[^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d])/g).length;
}
}function CheckPassword(password) {
document.getElementById("n").innerHTML = function (password) {
switch (EvaluatePassword(password)) {
case 0:
return "未输入";
case 1:
return "太简单";
case 2:
return "还可以";
case 3:
return "比较强";
case 4:
return "非常强";
}
}(password) //这个匿名函数尾巴上为啥还有个参?}
</script>
<input type="text" id="txt" onkeyup="CheckPassword(this.value)"><label id="n"></label>这个代码是我找的,两个地方看不懂:1、谁能解释下那个正则,我有点看不懂负向前瞻里面那块2、上面也提出了,函数尾巴上为啥还有个参,我看到有些函数是这种写法,哪怕里面没有参数,右大括号后也要带个括号
没有就运行不起,请问是什么原因
解决方案 »
- Highcharts already defined in the page
- 不知道flex builder发到哪个版块关于环境配置的问题
- ajax,jQuery,property之间的关系
- 看看这个奇怪的for循环
- <html:text indexed=true标签的问题
- 在数组里取出值,把代码换个地方就查不到东西了,为什么?请高手进来指点指点..(急)
- 三级联动菜单的值(在线等,马上结)
- 在一个输入框中加了onkeyup事件后,怎么判断前一次的关标位置?
- 请问如何在已有的一张表中插入我想要的行数,载入时不让页面刷新,动态的往页面添加。(谢谢)
- 密码验证框,怎么回事?
- 有关背景位置的问题(高分)
- 请教如何让输入框的输入焦点失效?
2.自执行函数
这么说吧,/[a-z](?![^a-z]*[a-z])|[A-Z](?![^A-Z]*[A-Z])|\d(?![^\d]*\d)|[^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d])/g总共由四部分组成,分别是
1) [a-z](?![^a-z]*[a-z])
2) [A-Z](?![^A-Z]*[A-Z])
3) \d(?![^\d]*\d)
4) [^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d]
正好对应密码的组成元素(小写字母,大写字母,数字,符号);本来呢实现查找小写字母,大写字母,数字,符号只需要/[a-z]+|[A-Z]+|\d+|[^a-zA-Z\d]+/g就可以了,但是密码是没有固定形式的,比如abc123cde这种形式就会出问题了,用/[a-z]+|[A-Z]+|\d+|[^a-zA-Z\d]+/g会得到abc,123,cde三个匹配,不符合要求,所以用[a-z](?![^a-z]*[a-z])过滤掉了abc,其他的同理。。
再说下[a-z](?![^a-z]*[a-z]),这个正则表示匹配一个小写字母,且这个小写字母后面不能紧跟着小括号中描述的组合(若干个非小写字母 + 一个小写字母),其他的同理。。第二个问题是自执行函数的写法,var ret = function demo(arg){return arg;})(str)表示定义了demo函数并传入str参数并执行,
...
}这样写只是定义了一个匿名函数,并把这个匿名函数的引用传给n的innerHTML