Регулярное выражение: проверить, что имя файла НЕ заканчивается на .doc - PullRequest
3 голосов
/ 06 мая 2011

Я пытаюсь проверить, что файл не заканчивается на .doc.

Я хочу запретить загрузку документов doc и docx.

Кажется, что ^.*(?<!doc|docx|DOC|DOCX).*$Посмотрите правильно, с объяснением, но оно не проходит ..

т.е. test.jpg должно быть разрешено ... test.doc не должно ..

и т. д.

Ответы [ 5 ]

3 голосов
/ 06 мая 2011

Попробуйте удалить .* в конце:

^.*(?<!doc|docx|DOC|DOCX)$

, хотя я предлагаю сделать обратное.Вы можете создать регулярное выражение, которое будет соответствовать файлам, которые заканчиваются на .doc, .docx и т. Д., И если оно совпадает, вы знаете, что это неверный файл.

Кроме того, как сказал @krookedking, вы должнывключите \., иначе он не будет соответствовать ничему, что заканчивается на doc, docx, ...

2 голосов
/ 06 мая 2011
(?i).*\.docx?

Вы должны выбрать те, которые не соответствуют этому шаблону.

0 голосов
/ 15 октября 2014

Вы можете использовать взгляд вперед вместо взгляда назад ( правила обхода ). Взгляд вперед будет делать то, что вы хотите, в том числе, если он заканчивается docx. (если нет имени файла .doc (x), например, test.extraperiod.doc)

^.*\.(?!doc).*$

без учета регистра

^.*\.(?!(?i)doc).*$

Этот взгляд в будущее может решить проблему test.extraperiod.doc

^((?!\.(?i)docx?).)*$
0 голосов
/ 06 мая 2011

Мой вариант:

^.*(?<!\.(?i)docx?)$

'?'делает x необязательным, (? i) делает его нечувствительным к регистру, поэтому он должен соответствовать Doc и DocX.

0 голосов
/ 06 мая 2011

При использовании регулярного выражения используйте регистр игнорирования. Что если кто-то добавит файл .doCx или .dOcX и т. Д.?

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

Вот небольшой пример C #:

    static void Main(string[] args)
    {
        string correctFilename = "something.xlsx";
        Debug.Assert(IsValidFile(correctFilename));

        string wrongFilename = "something.docx";
        Debug.Assert(!IsValidFile(wrongFilename));

        string wrongFilename2 = "something.doc";
        Debug.Assert(!IsValidFile(wrongFilename2));
    }

    static bool IsValidFile(string filename)
    {
        string ext = Path.GetExtension(filename).ToLower();
        return ext != ".docx"
            && ext != ".doc";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...