我似乎找不到可以测试以下情况的JavaScript正则表达式:
你可以看到我想要的东西。我只需要它来验证文件路径。但似乎我发现的所有表达都不适用于JavaScript。
答案 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]:|\\)\\)|(\\))?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$
这是明确的 - 正则表达非转义版本更容易阅读(真的!)。
它匹配像:
等
答案 4 :(得分:0)
你可以从:
开始^([a-zA-Z]:)?(\\[a-zA-Z0-9_\-]+)+\\?
这匹配您的所有样品。