JavaScript-急求 js正则表达式
情况是这样滴:需要写一个判断密码强弱的js,按一般的很容易实现,但是很恶俗的需求之一就是强密码中有一条规定------不包含长度大于3连续键盘输入序列、连续数字、连续字母。
一碰正则就头疼的我实在木有办法了,网上也木有查到符合要求的,想到用ASCLL码比较,也木有写出来,特来此求教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只要枚举每一位相邻两位相减为1,连续出现3次就判断为不符合要求就行了。
你说的键盘输入序列是什么意思,类似qwerty这种吗,那可以放一字符串里,然后当查到一个在字符串的字符时,记下这位下标,与密码之后的对比是否相同。
另外是ASCII码,劝楼主认真做做功课吧
一定要追求用正则吗?
密码强弱判断是个比较复杂的问题,我上次做这个功能,从163邮箱那里提取了些代码,
可以参考一下
//=====密码检测相关 (摘自:网易邮箱 http://email.163.com/)
//返回字符串范围值,用于密码强度检测
function charMode(f) {
var b = " ``~~!!@·##$¥%%^…&&()()--_—==++[][]|·::;;"“\、'‘,,<>〈〉??//**.。{}{}";
var e = f.charCodeAt(0);
if (e >= 48 && e <= 57) {
return 1
} else {
if (e >= 65 && e <= 90) {
return 2
} else {
if (e >= 97 && e <= 122) {
return 4
} else {
if ( - 1 < b.indexOf(f)) {
return 8
}
}
}
}
return 0
}
var a = {
repeat: function(c) {
return /^(.)1+$/.test(c)
},
list: (function() {
var c = ["123456", "123456789", "12345678", "123123", "5201314", "1234567", "7758521", "654321", "1314520", "123321", "1234567890", "147258369", "123654", "5211314", "woaini", "1230123", "987654321", "147258", "123123123", "7758258", "520520", "789456", "456789", "159357", "112233", "1314521", "456123", "110110", "521521", "zxcvbnm", "789456123", "0123456789", "0123456", "123465", "159753", "qwertyuiop", "987654", "115415", "1234560", "123000", "123789", "100200", "963852741", "121212", "111222", "123654789", "12301230", "456456", "741852963", "asdasd", "asdfghjkl", "369258", "863786", "258369", "8718693", "666888", "5845201314", "741852", "168168", "iloveyou", "852963", "4655321", "102030", "147852369", "321321"];
return function(e) {
for (var d = 0; d < c.length; d++) {
if (e == c[d]) {
return true
}
}
return false
}
})()
}
function checkPasswordStrength(e) {
var d = 0,
f, c = 0;
for (i = 0; i < e.length; i++) {
f = charMode(e.charAt(i));
if (0 == f) {
return - 1
}
if (0 == (d & f)) {
d |= f; ++c
}
}
return c
}
function checkPassword(e) {
var c = e.length;
for (i = 0; i < c; i++) {
if (0 == charMode(e.charAt(i))) {
return - 3
}
}
if (c < 6) {
return - 1
} else {
if (c > 16) {
return - 2
} else {
for (var d in a) {
if (a[d](e)) {
return - 4
}
}
}
}
return 1
}
//检测并显示密码强度提示
function showCheckPassword(p, d, callback){
d=$(d);
$(p).keyup(function(){
var v=$(p).val(), a = checkPassword(v);
var s = checkPasswordStrength(v),sui = d.find('span');
sui.css('color','').removeClass()
if(a == 1){
sui.slice(0,s).addClass('strength'+s);
sui.eq(s-1).css('color','#fff');
}
$(p).data('pass',callback(s, a));
});
}
//=====密码检测相关 OVER
我正则也不大行。搜索找到这样一个,可以找出连续出现3次的字符 (w)1{2,}
可以用这个正则做检测:
if(/(w)1{2,}/g.exec("abcccdef")) alert("不符合");
是不大于3啊。。那就是连续4次是不符合的。。改成(w)1{3,} ,把里面的2改成3