2012-06-19 17 views
8

Mam wyrażenie regularne do sprawdzania poprawności nazw plików. Oto ona:Wywołanie JavaScript do sprawdzania poprawności nazw plików

/[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/ 

Powinno to pozwolić nazwy plików tak:

aaa 
aaa.ext 
a# 
A9#.ext 

Następujące znaki są niedozwolone \/: * ? \" < > |

Problemem jest to, że nazwy plików jak *.txt lub /\kk przechodzi walidację . Robię sprawdzanie poprawności za pomocą zdarzenia keyup. Więc kiedy dodaję jedną dodatkową postać po niedozwoleniu, pokazuje ona, że ​​wszystko jest w porządku.

Odpowiedz

7

Trzeba dodać kotwicę wywoławcza:

/^[0-9a-zA-Z ... ]+$/ 

Mówi silnik dopasować od początku wejścia aż do końca wejścia, natomiast w przypadku oryginalnej ekspresji potrzebuje tylko do dopasuj na końcu wejścia.

6

Konieczne jest zakotwiczenie wyrażenia za pomocą ^ i $. Na przykład:

/^[-\w^&'@{}[\],$=!#().%+~ ]+$/ 

Pamiętaj, że musisz uciekać - w klasie znaków, lub umieścić go pierwszy/ostatni.

24

Dla nazw Windows.

var isValid=(function(){ 
    var rg1=/^[^\\/:\*\?"<>\|]+$/; // forbidden characters \/: * ? " < > | 
    var rg2=/^\./; // cannot start with dot (.) 
    var rg3=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i; // forbidden file names 
    return function isValid(fname){ 
    return rg1.test(fname)&&!rg2.test(fname)&&!rg3.test(fname); 
    } 
})(); 

isValid('file name'); 
+1

Escape/with \ in rg1. Przynajmniej tak myśli VS 2010. – noober

+1

^(?! \.) (?! com [0-9] $) (?! con $) (?! Lpt [0-9] $) (?! nul $) (?! prn $) [^ \ | \ * \? \\: <>/$ "] * [^ \. \ | \ * \? \\: <>/$"] + $ –

+0

Dzięki @RyanWilliams za komentarz. Ale wiem, jak utworzyć plik w systemie Windows z długą nazwą pliku, która zawiera kropkę na końcu nazwy pliku i bez rozszerzenia :) –

2
/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/ 

Must not be empty. 
Must not start with . 
Must not be com0-com9, con, lpt0-lpt9, nul, prn 
Must not contain | * ? \ : < > $ 
Must not end with . 
0

chciałbym spróbować coś z tym Regex (można nawet uczynić atrybut poprawności dla ASP.NET MVC z nim!):

@"^[^\u0022\u003C\u003E\u007C\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u003A\u002A\u003F\u005C\u002F]*$" 

Jeśli pasuje wejście, to jest poprawna nazwa pliku (przynajmniej w systemie Windows).

Powiązane problemy