Подтвердить что ты не робот

Тестовое имя файла с регулярным выражением

Я пытаюсь проверить строку имени файла с помощью этого шаблона:

^[A-Za-z0-9-_,\s]+[.]{1}[A-Za-z]{3}$

Я хочу убедиться, что существует расширение из трех букв, и пусть буквы, цифры и эти символы: - _,\s предшествуют, но я не хочу включать все буквы и символы в имени файла. Я мог бы просто использовать * вместо +, но это должно совпадать с 0 или более, что не будет действительным именем файла.

Вот несколько примеров того, как должно реагировать правило:

Correct file name.pdf - true
Correct, file name.pdf - true
Correct_file_name.pdf - true
Correctfilename.pdf - true
Incorrect &% file name.pdf - false
Incorrect file name- false

Было бы здорово, если бы кто-то мог указать мне в правильном направлении.

Спасибо

4b9b3361

Ответ 1

Вместо этого вы можете использовать эти выражения:

  • \w - это то же самое, что и [a-zA-Z0-9_]
  • \d - это то же самое, что [0-9]
  • \. - это то же самое, что и [.]{1}

Что бы сделать ваше регулярное выражение:

^[\w,\s-]+\.[A-Za-z]{3}$

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

Обратите внимание, что последний [a-zA-Z] не может быть заменен на \w, потому что \w включает символ подчеркивания и цифры.

EDITED: @tomasz прав! \w == [a-zA-Z0-9_] (подтверждено здесь), поэтому я изменил свой ответ, чтобы удалить ненужный \d из первого класса символов.

Ответ 2

Этот вопрос был задан специально, чтобы разрешить расширение с тремя буквами.

Для всех, кто приходит из DuckDuckGo, как и я (да, вы не должны использовать Google: p), это регулярное выражение проверяет правильные имена файлов и пути к файлам в Windows, Unix en macOS:

^[^<>:;,?"*|/]+$

Примечание. В Windows \ не разрешено в именах файлов, но указанное выше регулярное выражение работает для проверки допустимых путей в Windows. Включите \\ между скобками ^[...]+$, если вы хотите, чтобы он проверял правильные имена файлов и не проверял пути.