Вопрос:

Регулярное выражение для соответствия действительному абсолютному каталогу Windows, содержащему пробелы

regex

14429 просмотра

3 ответа

990 Репутация автора

Я хотел бы, чтобы регулярное выражение совпадало с допустимым абсолютным путем к каталогу Windows, где имена каталогов могут содержать пробелы.

Пример совпадения:

C:\pictures\holiday  (without trailing backslash)
C:\pictures\holiday\ (or with trailing backslash)
C:\ pictures\holiday
C:\ pictures\holiday\
C:\pictures \ holiday
C:\pictures \ holiday\
C:\pictures\ holiday \

Пример терпит неудачу:

\pictures\holiday (no relative path allowed)
C:\pictures*\holiday (not a valid directory path)

Я пытался, ^[a-zA-Z]:(\\\w+)*([\\])?$но это не соответствует пробелам.

Я также пытался, ^[a-zA-Z]:(\s)*(\\\w+)*(\s)*([\\])?$но это работает беспорядочно.

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

Заранее спасибо!

Автор: InvalidBrainException Источник Размещён: 11.07.2014 04:45

Ответы (3)


9 плюса

4538 Репутация автора

Решение

Вот регулярное выражение, которое будет работать:

^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$

Это делает путь соответствующим стандарту NTFS (см. Спецификацию MSDN ). Я сломаю это:

^[a-zA-Z]:\\ соответствует одной букве диска, с двоеточием и обратной косой чертой

(?![<>:"/\\|?*]) отрицательный взгляд, чтобы гарантировать, что следующий символ не является недействительным

((?![<>:"/\\|?*]).)+ переносит этот взгляд вперед, за которым следует следующий символ, любое количество раз

(?<![ .])\\является отрицательным взглядом, чтобы убедиться, что файл / каталог не заканчивается пробелом или точкой. Обратите внимание: Lookbehinds пока не полностью реализованы повсюду .

Все это повторяется от 0 до много раз, с последним необязательным обратным слешем.

Для многих случаев использования может быть лучше ограничить длину пути до 256 символов. Для этого замените *на {0,256}.

РЕДАКТИРОВАТЬ: разрешить корневой каталог

Автор: Brian Stephens Размещён: 11.07.2014 05:22

0 плюса

8 Репутация автора

function isFileOrFolderPathValid(path)
{
    var result =  new RegExp(/^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+\.[a-zA-Z0-9]+$/i).test(path);

    if (result === true) return true;

    result = new RegExp(/^[a-z]:((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+$/i).test(path);    

    //result = /^[a-zA-Z]:\\(\w+\\)*\w*$/.test(path);

    return result;
}
Автор: Perumal Размещён: 07.04.2017 07:16

1 плюс

11 Репутация автора

Следующее выражение регулярного выражения работает для меня для проверки пользовательских правил по пути, похожему на строку.

/ ^ [AZ]: (((\ | /) [! А-z0-9 \ s _ @ - ^ # $% & + = {} []] +) + (\ | /)?) $ / Я

var path="C:\\backup\\newFolder" ; // valid
// var path="C:\\backup\\newFolder\\" ; // valid
// var path="C:\/backup\/newFolder\\" ; // valid
// var path="C:\\\backup\newFolder" ; // invalid
// var path="C:\backup//\newFolder" ; // invalid
// var path="C:\backup\new..Folder" ; // invalid


if((/^[a-z]:(((\\|\/)[a-z0-9\s_@\-^!#$%&+={}\[\]]+)+(\\|\/)?)$/i.test(path))) {
    alert("valid path string");
} else {
    alert("Invalid Path String");
}

Автор: Mahesh Mule Размещён: 25.04.2019 04:27
Вопросы из категории :
32x32