正则表达式 求救:限制连续重复数字

火速支援 2015-06-25 07:08:44
各位好,
小弟近日 有一个对密码的需求:密码长度为6位,当中的数字或字母不能连续重复,也不能是连续的。比如111111和123456这都是限制的
...全文
7868 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
及时雨送浆 2017-06-27
  • 打赏
  • 举报
回复
好,很好用!
哈喽大海豚 2015-06-30
  • 打赏
  • 举报
回复
不是我说楼主,直接写成函数,不用正则效率比你现在高多了
sinat_15155817 2015-06-30
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
\b((?!abc)\w)+\b 匹配不包含连续字符串abc的单词。 \b((?!123456)\w)+\b 匹配不包含连续字符串123456的单词。不知道可不可以这样理解
终遇你.. 2015-06-27
  • 打赏
  • 举报
回复
例如 int m =1+2+3+4+5+6; int m1 =2+3+4+5+6+7; int m2= 3+4+5+6+7+8; System.out.println(m/6); System.out.println(m1/6); System.out.println(m2/6); 3 4 5
终遇你.. 2015-06-27
  • 打赏
  • 举报
回复
如果 连续六为相加用和除以6等于第三位 就是 连续数字
我叫小菜菜 2015-06-26
  • 打赏
  • 举报
回复
判断连续
if(str.length<2){return false;}
else
{
for(int i=1;i<str.length;i++)
{
 if(abs(str[i]-str[i-1])==1)  {return false;}   //前后ascii码差值绝对值为1表示连续
}
}
9:@A。。。。。。误判。。。。。。。
於黾 2015-06-26
  • 打赏
  • 举报
回复
用自己最擅长的方法解决问题才是正道 不要过于追求高大上的写法 循环,判断,不就搞定了
gengchenhui 2015-06-26
  • 打赏
  • 举报
回复
用sp的话说,用自己最熟悉的技术,既然不会使用正则(正则也不是干这个的,虽然可以判断格式,但相同什么的一般没用正则的),那就写个方法判断不就行了么。
ajianchina 2015-06-26
  • 打赏
  • 举报
回复
如果不能用一句正则表达式完成所有的判断,就不要再纠结这个问题,需要出现两次以上的IsMatch,那么就直接用纯方法来解决,不然就是死钻牛角尖,最后搞成了方法+正则,不伦不类。
marswangbo 2015-06-26
  • 打赏
  • 举报
回复
自己写个方法判断吧。。。正则不是万能的。。。有这个时间去研究正则,换个思路可能就轻松解决了。。。。
  • 打赏
  • 举报
回复
^(?=\d+) 后面必须是一个以上的数字 ^(?!([\d])\1{5})后面不能六位数字相同
  • 打赏
  • 举报
回复
(\d)\1就等价于(?<k1>\d)\k<k1> 这个是用了两个零宽断言,按这个正则的话.*和.*?可以去掉,跟下面是一样的结果
^(?=\d+)(?!([\d])\1{5})[\d]{6}$
火速支援 2015-06-26
  • 打赏
  • 举报
回复
谢谢大家的回复。我后来找了个这样的正则表达式
 ^(?=.*\d+)(?!.*?([\d])\1{5})[\d]{6}$
,它实现了以下内容:密码为6位纯数字,且不能连续重复;即去掉了000000~999999这10种情况。但我对这个正则表达式还是没怎么读懂,麻烦大家指点下,最好一步步解析下。菜鸟拜谢
(?=.*\d+)
?=应该是只匹配它后面的表达式,若匹配则正; .*是不是多余了
(?!.*?([\d])\1{5})
?!后面的?号是什么意思 \1是表示匹配两个连续的相同字符
[\d]{6}
这部分我只知道{6}是限制了长度
我叫小菜菜 2015-06-26
  • 打赏
  • 举报
回复
发个正规一点的不成文准则。。。 链接:传送门 你是自己写正则表达式吗?挺麻烦的,一般用的时候都是直接参考正则表达式文册也没必要记住 下面写了一个函数来验证密码强度,你可以写一个showPwRank(arg)方法用于显示强度 验证密码强度的js在网上挺多的
function checkRank(val){
   if(val.length<6||/^[0-9]{1,8}$/.test(val))
   {
        showPwRank(0);
        return 0;
   }
   var ls = 0;
   if (val.match(/[a-z]/g)){ ls++; }
   if(val.match(/[A-Z]/g)){ ls++; } 
   if (val.match(/[0-9]/g)){ ls++; }
   if (val.match(/[^a-zA-Z0-9]/g)){ ls++; }
   if (val.length < 8 && ls > 1){  ls = 1;   } 
   if(ls>3) {   ls=3; };
   return ls; 
    }
ajianchina 2015-06-25
  • 打赏
  • 举报
回复
不一定要正则的话,可以简单点。

string psw = "111111"; //密码
string srt = "0123456789_9876543210_abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA";
 if (psw.Length != 6 || psw.Distinct().Count() == 1 || (!psw.Contains("_") && srt.Contains(psw)))
{
    //不通过
}
else
 {
    //通过
}
  • 打赏
  • 举报
回复
            var str = "171325";
            if (Regex.IsMatch(str, @"^[0-9a-zA-Z]{6}$") && !Regex.IsMatch(str, @"(?<k1>[0-9a-zA-Z])\k<k1>+"))
            {
                Console.WriteLine("success");
            }
还有个连续的你自己写循环判断吧 至于弱密码,一般用几个正则来判断比较方便
火速支援 2015-06-25
  • 打赏
  • 举报
回复
对了,如果是有重复字符就算弱密码的话,比如(123566,111233,aa1232),这种情况能否用一个表达式直接实现啊。
火速支援 2015-06-25
  • 打赏
  • 举报
回复
密码的规则暂定是:长度6位;不允许连续重复(111111是不行的) ^(?<k1>[0-9a-zA-Z])\k<k1>{5}$ 这个已经表达式满足这两个规则了吧。至于不允许连续可以先放着。
  • 打赏
  • 举报
回复
(?<k1>[0-9a-zA-Z])\k<k1>+
如果匹配时代表有重复 你只是不允许6位全部相同,那就是不允许下面这个正则匹配成功
^(?<k1>[0-9a-zA-Z])\k<k1>{5}$
你要密码匹配密码的话,不知道你什么规则,如果仅仅数字字母的话那就是要匹配
^[0-9a-zA-Z]{6}$
所以上面两个正则可以搞定你的六位长度字符串,并且不允许六位全部相同,不允许连续这个要写循环代码了
加载更多回复(6)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧