Регулярное выражение для соответствия действительному абсолютному каталогу Windows, содержащему пробелы
14429 просмотра
3 ответа
Я хотел бы, чтобы регулярное выражение совпадало с допустимым абсолютным путем к каталогу 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 Источник Размещён: 13.11.2019 11:48Ответы (3)
9 плюса
Вот регулярное выражение, которое будет работать:
^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$
Это делает путь соответствующим стандарту NTFS (см. Спецификацию MSDN ). Я сломаю это:
^[a-zA-Z]:\\
соответствует одной букве диска, с двоеточием и обратной косой чертой
(?![<>:"/\\|?*])
отрицательный взгляд, чтобы гарантировать, что следующий символ не является недействительным
((?![<>:"/\\|?*]).)+
переносит этот взгляд вперед, за которым следует следующий символ, любое количество раз
(?<![ .])\\
является отрицательным взглядом, чтобы убедиться, что файл / каталог не заканчивается пробелом или точкой. Обратите внимание: Lookbehinds пока не полностью реализованы повсюду .
Все это повторяется от 0 до много раз, с последним необязательным обратным слешем.
Для многих случаев использования может быть лучше ограничить длину пути до 256 символов. Для этого замените *
на {0,256}
.
РЕДАКТИРОВАТЬ: разрешить корневой каталог
Автор: Brian Stephens Размещён: 11.07.2014 05:221 плюс
Следующее выражение регулярного выражения работает для меня для проверки пользовательских правил по пути, похожему на строку.
/ ^ [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");
}
0 плюса
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
Вопросы из категории :
- regex Learning Regular Expressions
- regex Regex и unicode
- regex Мое регулярное выражение слишком подходит. Как мне это остановить?
- regex Как выполнить подстановку Perl для строки, сохранив оригинал?
- regex Замена n-го экземпляра совпадения с регулярным выражением в Javascript
- regex Как заменить простые URL ссылками?
- regex Python re.sub с флагом не заменяет все вхождения
- regex Как проверить адрес электронной почты в JavaScript
- regex Как экранировать текст для регулярного выражения в Java
- regex Регулярное выражение, которое будет соответствовать объявлению метода Java
- regex Разделить строку пробелами - сохранить цитируемые подстроки - в Python
- regex Регулярное выражение для разбора номера версии
- regex Регулярное выражение для соответствия имени хоста DNS или IP-адресу?
- regex Комплексное регулярное выражение для проверки номера телефона
- regex Можно ли использовать регулярные выражения для сопоставления с вложенными шаблонами?
- regex Поиск UUID в тексте с регулярным выражением
- regex Регулярное выражение для соответствия неанглийским символам?
- regex В регулярном выражении Java, как я могу получить класс символов, например [az], чтобы соответствовать знак - - минус?
- regex .NET - Как вы можете разделить строку с заглавными буквами в массив?
- regex Как мне сопоставить любой символ в нескольких строках регулярного выражения?