2014-04-20 12 views
6

Używam wtyczki do przesyłania plików JQuery, dla nadania wartości opcji akceptacji plików potrzebuję wyrażenia regularnego, które wskaże, jakie typy plików mają być ograniczone. Muszę ograniczyć zarówno exe i JS, który osiągnąłem stosując poniżej wypowiedziWyrażenie regularne do wykluczania typów plików .exe i .js

(\.|\/)(!exe|!js)$

Ale to wyrażenie nie pozwalał innych plików, jak również wtedy Próbowałem dodając jedno rozszerzenie poniżej

(\.|\/)(!exe|!js|pdf)$

Powyżej wyrażenia regularnego akceptuje tylko plik PDF i nie akceptuje plików exe i JS. Teraz muszę włączyć dla wszystkich rozszerzeń plików oprócz exe i js. Trudno będzie dodać wszystkie rozszerzenia do wyrażenia. Czy możemy wspomnieć o tym, jak w wyrażeniu akceptować inne typy plików z wyjątkiem exe i js w podobnym formacie powyżej. To wyrażenie regularne jest dla JS.

Dzięki

Vinay

Odpowiedz

10

Pozwoli to wykluczyć .js i .exe na końcu łańcucha, ale pozwalają niczego innego:

/^[^.]+$|\.(?!(js|exe)$)([^.]+$)/ 

podziale:

  1. ^[^.]+$ pasuje dowolny ciąg bez kropek
  2. \.(?!(js|exe)$)([^.]+$) dopasowania kropka tylko wtedy, gdy nie następuje po niej js lub exe.

Poniżej są dozwolone: ​​

  • something.js.notjs
  • somethingelse.exee
  • /something.js/foo

Następujący nie pozwolił:

  • jquery.js
  • outlook.exe

Uwaga: z wyłączeniem niektórych rozszerzeń plików nie jest substytutem dla bezpieczeństwa, a nawet jeśli to były pliki JS i EXE nie byłaby niepełna Blacklist. Jeśli Twoim celem w wykluczeniu niektórych rozszerzeń jest ochrona serwera lub użytkowników, rozważ białą listę rozszerzeń i dokładną weryfikację danych plików po przesłaniu.

+0

Dzięki za szczegółowe informacje. Wyrażenie regularne działa z niewielkim problemem. Kiedy dodaję więcej niż jeden plik exe, narzędzie nie pokazuje błędu sprawdzania poprawności dla drugiego pliku exe. Muszę sprawdzić, czy jest jakiś problem z wtyczką JS. – Vinay

0

Nie znam tej pracy czy nie, ale 99% to będzie działać, aby wykluczyć tę EXE lub js użycie przedłużacza następujący wzór

/\.(exe|js)$/ig 

następujący kod daje TRUE, gdy plik znajduje się na twojej czarnej liście. W przeciwnym razie daj FALSE

var result = /\.(exe|js)$/ig.test(filename); 

Mam nadzieję, że ci to pomoże!

+0

Działa dokładnie odwrotnie. Przyjmuje exe i js, ale nie ma żadnego innego formatu. Czy możesz podać odwrotność tego warunku, myślę, że negatywny warunek dla tego rozwiąże problem – Vinay

+0

używasz znaku '!', Aby przekonwertować całą rzecz na stan negatywny. '/ \. (! exe |! js) $/ig' –

+0

Właśnie wypróbowaliśmy to, utrzymując w ten sposób, że wszystkie typy plików są nieprawidłowe, w tym exe i js – Vinay

1

Używa się składni (?!!). Ponadto, stwierdzając, co chcesz dopasować, nie mówisz, co powinno pasować. Tak to powinno załatwić sprawę:

(\.|\/)(?!exe|js).*$ 

to powiedzenie „Dopasuj wszystko to jest kropka, o ile to nie następuje«exe»lub«js», a następnie dopasować cokolwiek chcesz później (.). "

+0

Przetestowałem to wyrażenie na tej stronie http: // www.regexr.com/v1/ Myślę, że działa zgodnie z oczekiwaniami, ale kiedy podaję to jako opcję wtyczce, której używam, to nie działa, akceptuje wszystkie typy plików. Muszę dodać "/" z przodu i dodać "/ i" na końcu, aby podać go we właściwy sposób. Ostateczna wartość, jaką podaję do tej opcji to /(\.|\/)(?!exe|js).*$/i spowoduje dodanie do wyrażenia regularnego, co spowoduje różnicę – Vinay

+0

To zwróci false dla ciągów takich jak 'foo.jss' i'/execution/files' – eyelidlessness

+0

Masz rację, @eyelidlessness. Musiałbym zrobić?! składnia (?! (exe | js) $). * $ –