Regex для проверки пути к файлу в JavaScript - PullRequest
6 голосов
/ 08 января 2010

Мне не удается найти регулярное выражение для JavaScript, которое будет проверять следующие случаи:

  • C: \ Temp
  • D: \ имя_каталога \ тестирование \
  • \ джон-рабочий стол \ TEMPDIR \

Вы можете видеть, для чего я иду. Мне просто нужно проверить путь к файлу. Но кажется, что все выражения, которые я нашел, не работают для JavaScript.

Ответы [ 5 ]

4 голосов
/ 05 января 2012

Вот проверка пути 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;
}

Попробуйте сделать это в одном состоянии.

2 голосов
/ 08 января 2010

Попробуйте:

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

РЕДАКТИРОВАТЬ:

@ Барт заставил меня задуматься об этом регулярном выражении.Этот должен хорошо работать для путей Windows.

^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
1 голос
/ 07 декабря 2012

Я нашел пример здесь: http://regexlib.com/Search.aspx?k=file+name&AspxAutoDetectCookieSupport=1 и я изменил его, чтобы соответствовать путям, начинающимся с '\':

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

Эта версия с открытым регулярным выражением неэкранирована, и ее легче читать (правда!).

Это соответствует путям как:

  • C: \ Temp
  • \ Temp
  • .. \ моя папка
  • UOA

и т.д.

1 голос
/ 08 января 2010

Я думаю, что это будет работать:

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

Я только что исключил все (? ) недопустимые символы в именах файлов. Должен работать с международными именами файлов (я не знаю), а также с любым типом пути ОС (с исключениями, указанными ниже).

0 голосов
/ 08 января 2010

Вы можете начать с:

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

Это соответствует всем вашим образцам.

...