Правило проверки регулярного выражения С# с использованием Regex.Match()

Я написал регулярное выражение, которое должно проверять строку, используя следующие правила:

  • Первые четыре символа должны быть буквенно-цифровыми.
  • За альфа-символами следуют 6 или 7 числовых значений для общей длины 10 или 11.

Итак, строка должна выглядеть так, если она действительна:

CCCCNNNNNN или CCCCNNNNNNN

C - любой символ, а N - число.

Мое выражение написано: @"^[0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}$";

Код соответствия с регулярным выражением выглядит следующим образом:

var cc1 = "FOOBAR"; // should fail.
var cc2 = "AAAA1111111111"; // should succeed

var regex = @"^[0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}$";

Match match = Regex.Match( cc1, regex, RegexOptions.IgnoreCase );

if ( cc1 != string.Empty && match.Success )
{
     //"The Number must start with 4 letters and contain no numbers.",
     Error = SeverityType.Error
}

Я надеюсь, что кто-то сможет взглянуть на мое выражение и предложить некоторые отзывы об улучшениях для создания правильного соответствия.

Также, правильно ли использую .Match()? Если Match.Success - true, значит, это означает, что строка действительна?

Ответ 1

Регулярное выражение для 4 буквенно-цифровых символов следует за 6-7 десятичными цифрами:

var regex = @"^\w{4}\d{6,7}$";

Смотрите: Язык регулярных выражений - краткая ссылка


Метод Regex.Match возвращает Match объект. Свойство успеха указывает, успешно ли выполнено совпадение.

var match = Regex.Match(input, regex, RegexOptions.IgnoreCase);

if (!match.Success)
{
    // does not match
}

Ответ 2

Ваши условия дают:

  • Первые четыре символа должны быть буквенно-цифровыми: [A-Za-z\d]{4}
  • Далее следуют 6 или 7 числовых значений: \d{6,7}

Соедините его и привяжите его:

^[A-Za-z\d]{4}\d{6,7}\z

Altho, это немного зависит от того, как вы определяете "буквенно-цифровой". Также, если вы используете флаг игнорирования, вы можете удалить диапазон A-Z из выражения.

Ответ 3

Следующий код демонстрирует использование регулярных выражений:

        var cc1 = "FOOBAR"; // should fail.
        var cc2 = "AAAA1111111"; // should succeed
        var r = new Regex(@"^[0-9a-zA-Z]{4}\d{6,7}$");
        if (!r.IsMatch(cc2))
        {
            Console.WriteLine("cc2 doesn't match");
        }
        if (!r.IsMatch(cc1))
        {
            Console.WriteLine("cc1 doesn't match");
        }

Выход будет cc1 doesn't match.

Ответ 4

Попробуйте следующий шаблон:

@"^[A-za-z\d]{4}\d{6,7}$"