Регулярное выражение - имя файла не соответствует желаемому шаблону - PullRequest
1 голос
/ 08 марта 2019

Попытка выяснить, почему это имя файла не соответствует шаблону регулярного выражения:

  • Имя файла: file.txt
  • Шаблон: ^(([a-zA-Z0-9_-])+[[.]{1}([a-zA-Z0-9])+]{1})$

Я разрешаю имя и только одно расширение файла:

  • для имени, которое я использую: ([a-zA-Z0-9_-])+ - любое количество букв, цифр, подчеркиваний и тире.

  • для расширения Я использую это: [[.]{1}([a-zA-Z0-9])+]{1}, который является только одним расширением, который имеет ровно одну точку, за которой следуют буквы или цифры.

Сбой шаблона расширения, и я не понимаю, почему.

Тестовые случаи:

  • Эти имена файлов должны проходить: file.txt, fi-le.t7t
  • Эти имена файлов не должны проходить: file.txt.doc, file., file (последний, без расширения)

1 Ответ

2 голосов
/ 08 марта 2019

Попробуйте вместо этого:

^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9]+)$

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

Вместо того, чтобы использовать слегка неловко выглядящий [.] для представления буквального символа периода, вы можете просто экранировать чувствительный символ обратной косой чертой: \..

Кроме того, по умолчанию регулярное выражение будет ожидать, что последовательность будет совпадать ровно один раз, поэтому вам не нужно следовать условию {1}, потому что это значение по умолчанию.

И я не уверен, что вы имели в виду с термином, полностью заключенным в квадратные скобки [ и ], но квадратные скобки нужно использовать только, если вы хотите создать класс символов (чтобы определить набор допустимые символы), такие как существующий [a-zA-Z0-9_-].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...