phil.o
Ваше регулярное выражение не так уж далеко от истины; есть только два момента, которые необходимо рассмотреть:
- вам не нужно избегать косых черт (/
); то есть они не нуждаются в префиксе обратной косой черты. Простая косая черта не имеет смысла в синтаксисе регулярных выражений.
- однако вам нужно избежать точки в расширении имени файла. Точка означает "любой символ".
Таким образом, возможный синтаксис будет следующим
string pattern = @"^\d\d(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\.txt$";
bool isValidFilename = Regex.IsMatch(
filename,
pattern,
RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant
);
Вы можете прочитать больше об этом методе
здесь[
^].
Ключевые моменты для рассмотрения:
- Вероятно, лучше указать нечувствительный к регистру характер выражения с помощью правильного
RegexOptions
флаг.
- Узор, наоборот, должен
никогда следует сделать строчные/прописные буквы, так как это может изменить его синтаксис и сделать его неправильным.
В качестве заключительного замечания я использую программное обеспечение Expresso, которое является бесплатным, для создания и тестирования регулярных выражений; это также удивительный способ узнать о синтаксисе регулярных выражений. Однако это не единственный существующий инструмент; многие пользователи на этом форуме часто предоставляют впечатляющий список инструментов регулярных выражений; вы можете найти их с помощью простого поиска "регулярных выражений" в разделе "быстрые ответы".
[Редактировать] Я забыл упомянуть, что даже если это позволит вам проверить формат имени файла, это не является правильной проверкой даты. Можно сопоставить такие значения, как
000931.txt
(31 сентября) или
190229
(29 февраля для не високосного года). Если вы хотите убедиться, что дата является допустимой, то вам нужно будет получить числа (например, с группами, которые вы определили в своем выражении) и попытаться построить из них допустимую структуру DateTime. Ошибка будет помечать имя файла как содержащее недопустимую дату.
[Edit 2] читая решение 2, я замечаю, что только что предложил вам проверить недопустимое имя файла :( вы не можете иметь косые черты как часть имени файла. Я исправил регулярное выражение.