正则表达式匹配包含空格的有效绝对Windows目录

时间:2014-07-11 16:45:08

标签: regex

我希望正则表达式匹配有效的绝对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中。但我还没有找到一种适用于空间的方法。

提前致谢!

3 个答案:

答案 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;
}