Как я могу изменить свое регулярное выражение для проверки только символов в строке, которые появляются перед появлением буквенно-цифровых символов? - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь проверить строку, которая является путем к файлу с регулярным выражением, и я хочу, чтобы проверка регулярного выражения возвращала значение true, если и только если символы перед именем файла (которые являются только буквенно-цифровыми символами) ./ или ./../. Моя проблема в том, что если путь содержит каталог, такой как ./../../, тест возвращает true, потому что каталог начинается с ./.

Я полагаю, что если я проверю точное совпадение только на тех символах, которые появляются до любых буквенно-цифровых символов, я могу устранить эту проблему, но я не знаю, как это сделать.

Код:

function validPath(path) {
   if (!/^(\.\/|\.\/\.\.\/)/.test(path)) {
      path = "ERROR" //the path is not valid if ERROR is returned
   }

   return path;      //the path is valid if the path is returned
}

Я ожидаю, что на выходе validPath('./../../index.html') будет ERROR, но на выходе будет ./../../index.html

1 Ответ

1 голос
/ 25 марта 2019

Если вы знаете, что все имена файлов начинаются с букв, цифр или подчеркиваний ascii, вы можете расширить свое регулярное выражение, указав, что следующий символ после ./ или ./../ должен быть одним из ведущих символов имени файла:

if (!/^(\.\/|\.\/\.\.\/)\w/.test(path)) {

Здесь \w означает [A-Za-z0-9_].

Если вы хотите принять имена файлов, начинающиеся с точки или не-ASCII букв, у вас будет больше работы.

Регулярные выражения JavaScript изначально не обрабатывают не-ASCII-буквы, но для этого можно использовать сторонний механизм регулярных выражений.

Другой подход - сказать

if (!/^(\.\/|\.\/\.\.\/)[^.]/.test(path)) {
* 1016.* это означает, что вы не хотите, чтобы первый символ после ./ или ./../ был другой точкой.Это будет обрабатывать имена файлов с буквами не-ASCII, но не будет выбирать скрытые файлы, которые начинаются с точки.

Надеюсь, что приблизит вас!

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