比如:13933991133,只由139这3个数字组成
          16866881166,只由168这3个数字组成
这个正则怎么写啊,试了很久没有成功

解决方案 »

  1.   

    正则是用来加快开发的,如果不用正则更快,就不用正则{
        var b1 = DigitsOnly("13933991133", 3); // true
        var b2 = DigitsOnly("16866881166", 3); // true
        var b3 = DigitsOnly("12345678901", 3); // false
    }static bool DigitsOnly(string s, int digits)
    {
        return s.All(x => char.IsDigit(x)) && s.GroupBy(x => x).Count() == digits;
    }
      

  2.   

    6楼可以你其实只要去计数,超过三个不同数字就是false string str = "13933991133";
     bool isPhoneNumber =Regex.IsMatch(str,@"^\d{11}$")&&str.Distinct().Count() == 3;
      

  3.   

    你那分组捕获的如果前三个数字有两个及三个相同,后面才开始不同,你就验证不成功了,比如13楼说的,比如13333991133 ,13111112311,11111112311你这就是错误的。你必须1开始的话,我那个这里改下
    Regex.IsMatch(str,@"^1\d{10}$")14楼直接给你全组合了
      

  4.   

     不知道怎么用正则,但是你可以通过set判断一个字符串里面有几个非重复的字符。
      

  5.   

    正则不做这种业务
    弄个非常非常简单的算法
    substring(0,3)--->list
    后面8个,任一个都在list里面,就是true