我似乎找不到用于测试以下情况的 JavaScript 正则表达式:
- c:\温度
- D:\目录名\测试\
- \约翰桌面\临时目录\
你可以看到我的目的。我只需要它来验证文件路径。但似乎我发现的所有表达式都不适用于 JavaScript。
我似乎找不到用于测试以下情况的 JavaScript 正则表达式:
你可以看到我的目的。我只需要它来验证文件路径。但似乎我发现的所有表达式都不适用于 JavaScript。
这是 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;
}
试着让它在一个单一的条件下。
尝试这个:
([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?
编辑:
@Bart 让我想到了这个正则表达式。这应该适用于 Windows 的路径。
^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
我在这里找到了一个例子:
http ://regexlib.com/Search.aspx?k=file+name&
AspxAutoDetectCookieSupport=1 我已经修改它以匹配以以下开头的路径'\'
:
^((([a-zA-Z]:|\\)\\)|(\\))?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$
这是清晰的正则表达式未转义版本,更易于阅读(真的!)。
它匹配如下路径:
等等
我认为这会起作用:
var reg = new RegExp("^(?>[a-z]:)?(?>\\|/)?([^\\/?%*:|\"<>\r\n]+(?>\\|/)?)+$", "i");
我刚刚排除了文件名中的所有(?)无效字符。应该使用国际文件名(我不知道)以及任何操作系统路径类型(除了下面提到的例外)。
你可以从:
^([a-zA-Z]:)?(\\[a-zA-Z0-9_\-]+)+\\?
这与您的所有样本匹配。