Тестовое имя файла с регулярным выражением
Я пытаюсь проверить строку имени файла с помощью этого шаблона:
^[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
Было бы здорово, если бы кто-то мог указать мне в правильном направлении.
Спасибо
Ответы
Ответ 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. Включите \\
между скобками ^[...]+$
, если вы хотите, чтобы он проверял правильные имена файлов и не проверял пути.