在序列

时间:2016-05-23 14:09:14

标签: c# regex

我有一个例如“123a * a712”的序列,它是有效的。 我想确保只有3个字符不是数字,因为4+会使它无效。

几个例子:

“56 + 33” - 有效(空格也是一个字符)

“56 + 33 + 6” - 无效(超过3个非数字字符)

“错误” - 无效

“1234” - 有效

谢谢!

4 个答案:

答案 0 :(得分:3)

无需使用RegEx

bool IsValid = "123a*a712".Count(x => !char.IsDigit(x)) < 4;

答案 1 :(得分:3)

如果您绝对需要正则表达式解决方案,可以使用

^(\d*[^\d]?){0,3}\d*$

它最多可匹配三个非数字。

See it here at regex101

答案 2 :(得分:1)

  

我想确保只有3个字符不是   数字,因为4+会使它无效。

public static int countNonDigit(string str) {
  return (str.Length - str.Count(char.isDigit))
}

if (countNonDigit(str) >= 4) {
  // not valid
}

修改

刚刚意识到,使用str.Count(!char.isDigit);

可以实现同样的目标

答案 3 :(得分:0)

使用帮助者:

public static class String
{
    public static bool containsAtLeastXNonDigit(string s, int nbOfDigit)
    {
        return s.Count(!char.IsDigit) >= nbOfDigit;
    }
}

并使用它:String.containsAtLeastXNonDigit("ToTest", 4);