用于javascript中文件路径验证的正则表达式

时间:2010-01-08 19:52:27

标签: javascript regex filepath

我似乎找不到可以测试以下情况的JavaScript正则表达式:

  • C:\ TEMP
  • d:\目录名\测试\
  • \约翰桌面\ TEMPDIR \

你可以看到我想要的东西。我只需要它来验证文件路径。但似乎我发现的所有表达都不适用于JavaScript。

5 个答案:

答案 0 :(得分:4)

以下是Windows路径验证,它适用于所有Windows路径规则。

var contPathWin = document.editConf.containerPathWin.value;

if(contPathWin=="" || !windowsPathValidation(contPathWin))
{
    alert("please enter valid path");
    return false;
}

function windowsPathValidation(contwinpath)
{
    if((contwinpath.charAt(0) != "\\" || contwinpath.charAt(1) != "\\") || (contwinpath.charAt(0) != "/" || contwinpath.charAt(1) != "/"))
    {
       if(!contwinpath.charAt(0).match(/^[a-zA-Z]/))  
       {
            return false;
       }
       if(!contwinpath.charAt(1).match(/^[:]/) || !contwinpath.charAt(2).match(/^[\/\\]/))
       {
           return false;
       } 

}

这是针对linux路径验证的。

var contPathLinux = document.addSvmEncryption.containerPathLinux.value;

if(contPathLinux=="" || !linuxPathValidation(contPathLinux))
{
    alert("please enter valid path");
    return false;
}

function linuxPathValidation(contPathLinux)
{
    for(var k=0;k<contPathLinux.length;k++){
        if(contPathLinux.charAt(k).match(/^[\\]$/) ){
            return false;
        }
    }
    if(contPathLinux.charAt(0) != "/")
    {
        return false;
    }
    if(contPathLinux.charAt(0) == "/" && contPathLinux.charAt(1) == "/")
    {
        return false;
    }
    return true;
}

尝试在单一条件下制作它。

答案 1 :(得分:2)

试试这个:

([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?

编辑:

@Bart让我想起了这个正则表达式。这个应该适用于Windows的路径。

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

答案 2 :(得分:1)

我认为这会奏效:

var reg = new RegExp("^(?>[a-z]:)?(?>\\|/)?([^\\/?%*:|\"<>\r\n]+(?>\\|/)?)+$", "i");

我刚刚排除了文件名中的所有(?)无效字符。应该使用国际文件名(我不知道)以及任何操作系统路径类型(除了下面提到的例外)。

答案 3 :(得分:1)

我在这里找到了一个例子: http://regexlib.com/Search.aspx?k=file+name&AspxAutoDetectCookieSupport=1 我修改了它以匹配以'\'开头的pathes:

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

这是明确的 - 正则表达非转义版本更容易阅读(真的!)。

它匹配像:

  • C:\ TEMP
  • \ temp中
  • .. \ my folder
  • UOA

答案 4 :(得分:0)

你可以从:

开始
^([a-zA-Z]:)?(\\[a-zA-Z0-9_\-]+)+\\?

这匹配您的所有样品。