Regex til filstivalidering i JavaScript
Jeg kan tilsyneladende ikke finde et regulært udtryk til JavaScript, der vil teste for følgende tilfælde:
- c:\temp
- D:\directoryname\testing\
- \john-desktop\tempdir\
Du kan se, hvad jeg går efter. Jeg har bare brug for, at det validerer en filsti. Men det ser ud til, at alle de udtryk, jeg har fundet, ikke virker for JavaScript.
Svar #1
Her er Windows-sti valideringen, den fungerer fint for alle Windows-stiregler.
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;
}
}
og dette er til Linux-stivalidering.
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;
}
Prøv at gøre det i en enkelt betingelse.
Svar #2
Prøv dette:
([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?
REDIGER :
@Bart fik mig til at tænke på dette regexp. Denne burde fungere godt for Windows-stier.
^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
