2014-04-20 16 views
6

Tôi đang sử dụng plugin tải lên tệp JQuery, để đưa ra giá trị cho tùy chọn chấp nhận tệp, tôi cần biểu thức chính quy sẽ cho biết loại tệp nào bị hạn chế. Tôi cần phải hạn chế cả exe và js mà tôi đạt được bằng cách sử dụng dưới đây biểuCụm từ thông dụng để loại trừ các loại tệp .exe và .js

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

Nhưng đây là biểu hiện không cho phép các file khác cũng sau đó tôi đã cố gắng thêm một phần mở rộng như sau

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

Với biểu thức chính quy ở trên, nó chỉ chấp nhận pdf và không chấp nhận exe và JS. Bây giờ tôi cần phải kích hoạt cho tất cả các phạm vi tập tin ngoại trừ exe và js. Sẽ rất khó để thêm tất cả các phần mở rộng vào biểu thức. Chúng ta có thể đề cập đến một số cách trong biểu thức chấp nhận các loại tệp khác ngoại trừ exe và js ở định dạng tương tự ở trên. Biểu thức chính quy này dành cho JS.

Cảm ơn,

Vinay

Trả lời

10

này sẽ loại trừ .js.exe ở phần cuối của chuỗi, nhưng cho phép bất cứ điều gì khác:

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

hỏng xuống:

  1. ^[^.]+$ trận đấu bất kỳ chuỗi không có dấu chấm
  2. \.(?!(js|exe)$)([^.]+$) trận đấu một dấu chấm chỉ khi nó không được theo sau bởi js hoặc exe ở cuối chuỗi.

Sau đây là những phép:

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

Sau đây là không được phép:

  • jquery.js
  • outlook.exe

Lưu ý: trừ phần mở rộng tập tin nhất định không phải là một thay thế cho an ninh, và thậm chí nếu nó là file JS và EXE sẽ không phải là một danh sách đen toàn diện. Nếu mục đích của bạn trong việc loại trừ các tiện ích mở rộng nhất định là bảo vệ máy chủ hoặc người dùng của bạn, hãy xem xét danh sách trắng các tiện ích mở rộng và xác thực kỹ lưỡng dữ liệu tệp sau khi tải lên.

+0

Cảm ơn thông tin chi tiết. Cụm từ thông dụng đang làm việc với một số vấn đề nhỏ. Khi tôi thêm nhiều hơn một tệp exe thì công cụ không hiển thị lỗi xác thực cho tệp exe thứ hai. Tôi cần xem có vấn đề gì với JS plugin không. – Vinay

0

Tôi không biết công việc này hay không nhưng 99% này sẽ làm việc cho bạn loại trừ exe này hoặc sử dụng phần mở rộng js sau mẫu

/\.(exe|js)$/ig 

Tiếp theo đang cung cấp cho bạn TRUE khi tệp nằm trong danh sách đen của bạn. Nếu không, hãy cung cấp cho bạn FALSE

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

Hy vọng điều này sẽ giúp bạn!

+0

Hoạt động theo cách ngược lại. Nó chấp nhận exe và js nhưng không phải định dạng nào khác. Bạn có thể đưa ra điều ngược lại với điều kiện này không, tôi nghĩ điều kiện tiêu cực cho việc này sẽ giải quyết vấn đề – Vinay

+0

là bạn dùng dấu '!' Để chuyển toàn bộ điều kiện thành điều kiện âm. '/ \. (! exe |! js) $/ig' –

+0

Chỉ cần thử rằng, giữ nguyên cách nói rằng tất cả các loại tệp không hợp lệ bao gồm cả exe và js – Vinay

1

Bạn đang tìm cách sử dụng cú pháp (?! Pattern). Ngoài ra, trong khi nêu rõ nội dung bạn muốn khớp, bạn không nêu rõ nội dung nào phù hợp. Vì vậy, điều này sẽ làm các trick:

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

này được nói "Phù hợp với bất cứ điều gì đó là một dấu chấm miễn là nó không theo sau 'exe' hoặc 'js', và sau đó đối sánh số tiền bạn muốn sau đó (.). "

+0

Tôi đã thử nghiệm biểu thức đó trong trang web này http: // www.regexr.com/v1/ Tôi nghĩ rằng nó đang làm việc như mong đợi nhưng khi tôi đưa ra điều này như là một lựa chọn cho các plugin tôi đang sử dụng nó không hoạt động, nó chấp nhận tất cả các loại tập tin. Tôi cần phải thêm '/' ở phía trước và thêm '/ i' vào cuối để cung cấp cho nó một cách thích hợp. Vì vậy, giá trị cuối cùng tôi đang chuyển đến tùy chọn đó là /(\.|\/)(?!exe |js).*$/i sẽ thêm những giá trị đó vào biểu thức chính quy sẽ tạo ra bất kỳ sự khác biệt nào – Vinay

+0

Điều này sẽ trả về giá trị âm sai cho các chuỗi như 'foo.jss' và'/execution/files' – eyelidlessness

+0

Bạn nói đúng, @eyelidlessness. Tôi sẽ cần phải làm? cú pháp (?! (exe | js) $). * $ –

Các vấn đề liên quan