日期:2014-05-16  浏览次数:20458 次

这个正则在ie与ff中的结果不一样
下面这段代码是我从网上搜来的,是用js来检验密码的等级的
经过测试发现,我用的例子在ie中得到的结果是
===========>   0
a1_   ===========>   1
abcdef   ===========>   1
abcde123   ===========>   2
ads23%   ===========>   3
aA1B2^&2   ===========>   4

而在ff中得到的结果却是
===========>   0
a1_   ===========>   1
abcdef   ===========>   1
abcde123   ===========>   1
ads23%   ===========>   1
aA1B2^&2   ===========>   1

两种不同的结果,请问这个问题怎么解决?


------代码部分--------
/*   检验密码强度
1.   密码长度小于或等于五位.或者密码只有一种组合
2.   密码长度大于五位,   且有两种组合.
3.   密码长度大于五位,   且有三种组合.
4.   密码长度大于五位,   且有四种组合.
如果没有输入则返回0
*/
function   EvaluatePwd(word)
{
return   word.replace(/^(?:([a-z])|([A-Z])|([0-9])|(.)){6,}|(.)+$/g,   "$1$2$3$4$5 ").length;
}
var   test   =   new   Array( " ",   "a1_ ",   "abcdef ",   "abcde123 ",   "ads23% ",   "aA1B2^&2 ");
var   str   =   " ";
for(var   i   in   test)
{
        str   +=   test[i]   +   "     ===========>   "   +   Evaluate(test[i])+ " <br> ";
}
document.write(str);

------解决方案--------------------
昏 非得用这种变形的方法 尽管思路不错 但确实是取巧的写法 建议还是用下面的方式保险点
if(/\d/.test(word))i++;
if(/\W/.test(word))i++;
if(/[a-z]/.test(word))i++;
if(/[A-Z]/.test(word))i++;
------解决方案--------------------
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※以下是引用7楼 mingxuan3000(铭轩) 在2007-5-4 0:12:37 的发言:
──────────────────────────────────────────
查了好几个小时,现在我还没搞懂为什么在ie下回显示每类最后一个
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
确实是这样的,你可以在.net等其它正则引擎下测试.都能得出这样的结果,FF却不是