6

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

  • c:\温度
  • D:\目录名\测试\
  • \约翰桌面\临时目录\

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

4

5 回答 5

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

试着让它在一个单一的条件下。

于 2012-01-05T06:25:10.303 回答
2

尝试这个:

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

编辑:

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

^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
于 2010-01-08T19:57:24.723 回答
1

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

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

这是清晰的正则表达式未转义版本,更易于阅读(真的!)。

它匹配如下路径:

  • c:\温度
  • \温度
  • ..\我的文件夹
  • üöä

等等

于 2012-12-07T09:32:33.383 回答
1

我认为这会起作用:

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

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

于 2010-01-08T20:06:51.690 回答
0

你可以从:

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

这与您的所有样本匹配。

于 2010-01-08T19:59:06.433 回答