Правило проверки регулярного выражения С# с использованием 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}$"