Регулярное выражение для недопустимых имен файлов в windows - PullRequest
0 голосов
/ 13 июля 2020

Меня немного смущает синтаксис регулярных выражений. Мне нужно создать два отдельных шаблона Regex, которые определяют, допустимо ли имя файла в windows. Один из них соответствует любому слову, кроме этих символов (недопустимые символы) -

* "<>:" / \ | ? "

И второй шаблон соответствует любому слову, кроме этих слов (зарезервированные имена файлов) -

PRN , AUX, CLOCK, NUL, CON, COM, LPT

Я нашел комбинированную версию этого шаблона, которая выглядит так @"^(?!(?:PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d)(?:\..+)?$)[^\x00-\x1F\xA5\\?*:\"";|\/<>]+(?<![\s.])$", но главное, что мне нужно их разделить два.

Кто-нибудь может мне помочь? Заранее спасибо.

1 Ответ

0 голосов
/ 13 июля 2020

На самом деле это регулярное выражение проверяет три вещи.

Здесь вы можете проверить любое регулярное выражение: https://regex101.com/

Это сведет на нет все вхождения зарезервированного файла имена в любой позиции текста:

    (?:PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d)

, но для соответствия точному имени вам нужны ^ и &, которые указывают начало и конец текста, поэтому это будет работать для второй группы:

# 1

    ^(?:PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d)$

И для недопустимых символов это исключит все заданные символы:

# 2

    ^[^\x00-\x1F\xA5\\?*:\"";|\/<>]+$

, но это все еще позволяет ., a. и .a. Чтобы исключить эти три возможности, вам необходимо:

сначала добавить (?!(?:\..+)?$) в начало, чтобы исключить имена, начинающиеся с . (то есть \.)

, затем добавить (?<![.]) в конец для исключения имен, оканчивающихся на .

# 3

    ^(?!(?:\..+)?$).+(?<![.])$

Но это позволит много других возможностей с пробелами в начале и в конце.

На этом этапе вы можете обрезать текст, игнорировать недопустимые имена (Windows обрежет их) или расширить свое регулярное выражение следующим образом:

добавление \x20 исключает a и a. , но все же позволяет a и .a

    ^(?!(?:\..+)?$).+(?<![\x20.])$

добавление (?!(?:\x20+.+)?$) исключает начальные пробелы:

# 3

    ^(?!(?:\x20+.+)?$)(?!(?:\..+)?$).+(?<![\x20.])$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...