C # Регулярное выражение: {4} и возможно более 4 значений

#c# #regex

#c# #регулярное выражение

Вопрос:

Мне нужно регулярное выражение, которое проверяет, является ли ввод ровно 4 числами. Я использую «d{4}» (также пробовал «d d dd»). Но если вы вводите 5 чисел, это также говорит о том, что входные данные действительны.

   [TestMethod]
    public void RegexTest()
    {
        Regex expr = new Regex("\d{4}");
        String a = "4444", b = "4l44", c = "55555", d = "5 55";
        Match mc = expr.Match(a);
        Assert.IsTrue(mc.Success);

        mc = expr.Match(b);
        Assert.IsFalse(mc.Success);
        ***mc = expr.Match(c);
        Assert.IsFalse(mc.Success)***;
        mc = expr.Match(d);
        Assert.IsFalse(mc.Success);
    }
  

(это c, которое является ‘true’, но должно быть false, остальные работают)

Заранее спасибо, ~ сэр Тролль

Ответ №1:

Если должно быть ровно 4, то вам нужно использовать $ и ^, чтобы отметить конец и начало ввода:

 Regex expr = new Regex(@"^d{4}$");
  

Обратите внимание, что здесь я также использую дословные строковые литералы, так что экономьте на здравомыслии — тогда вам не нужно C # экранировать все ваши символы regex-escape. Только " требуется экранирование в C # (для "" ).

Ответ №2:

«55555» содержит «5555», которое является допустимым… Таким образом, строка содержит совпадение, даже если совпадение не является полной строкой. Решение смотрите в ответе Марка

Ответ №3:

строка из 5 цифр также содержит 4 цифры, поэтому вы должны убедиться, что вы также добавляете ограничения на начало и конец строки.

Это должно работать как ваше регулярное выражение:

 Regex expr = new Regex(@"^d{4}$");