我希望正则表达式匹配有效的绝对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)*([\\])?$
,但这种方式不正常。
正则表达式是我最后的选择。我还尝试使用非正则表达式解决方案来验证文本框,例如在this answer中。但我还没有找到一种适用于空间的方法。
提前致谢!
答案 0 :(得分:9)
这是一个可行的正则表达式:
^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$
它使路径符合NTFS标准(参见MSDN spec)。我会把它分解:
^[a-zA-Z]:\\
匹配单个驱动器号,冒号和反斜杠
(?![<>:"/\\|?*])
是一个负面的预测,以确保下一个字符无效
((?![<>:"/\\|?*]).)+
包裹前瞻,后跟下一个字符,任意次
(?<![ .])\\
是一个负面的lookbehind,以确保文件/目录不以空格或句点结尾。请注意:Lookbehinds are not fully implemented everywhere just yet。
所有这一切都重复了0到多次,最后一个反斜杠是可选的。
对于许多use cases,最好将路径长度限制为256个字符。为此,请将*
替换为{0,256}
。
编辑:允许根目录
答案 1 :(得分:1)
以下正则表达式对我有用,以针对类似路径的字符串验证自定义规则。
/ ^ [az]:((((\ | /)[a-z0-9 \ s _ @-^!#$%&+ = {} []] +)+(\ | /)?)$ / i
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");
}
答案 2 :(得分: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;
}