Đây là một regex xấu.
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
Hãy thực hiện từng phần một.
([a-zA-Z]:)
Điều này yêu cầu đường dẫn tệp bắt đầu bằng ổ đĩa như C:
, d:
, v.v.
(\\{2}\w+)\$?)
\\{2}
có nghĩa là dấu chéo ngược lặp lại hai lần (chú ý \
nhu cầu để được thoát), tiếp theo là một số chữ cái và số (\w+
), và sau đó có thể là một dấu đô la (\$?
). Đây là phần chủ của con đường UNC.
([a-zA-Z]:)|(\\{2}\w+)\$?)
|
có nghĩa là "hoặc". Vì vậy, hoặc bắt đầu bằng một ký tự ổ đĩa hoặc một đường dẫn UNC. Chúc mừng bạn đã khởi động những người dùng không phải Windows.
(\\(\w[\w].*))
này nên phần thư mục của con đường, nhưng thực sự là 2 chữ cái và số tiếp theo bất cứ điều gì ngoại trừ dòng mới (.*
), như \[email protected]#*(#$*)
.
Các regex thích hợp cho phần này nên (?:\\\w+)+
(.jpg|.JPG|.gif|.GIF)$
này có nghĩa là 3 ký tự cuối cùng của con đường phải jpg
, JPG
, gif
hoặc GIF
. Lưu ý rằng .
là không phải một dấu chấm, nhưng phù hợp với bất kỳ thứ gì ngoại trừ \n
, vì vậy, tên tệp như haha.abcgif
hoặc malicious.exe\0gif
sẽ chuyển.
Các regex thích hợp cho phần này nên \.(?:jpg|JPG|gif|GIF)$
Cùng,
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
sẽ phù hợp
D:\foo.jpg
\\remote$\dummy\..\C:\Windows\System32\Logo.gif
C:\Windows\System32\cmd.exe;--gif
và sẽ thất bại
/home/user/pictures/myself.jpg
C:\a.jpg
C:\d\e.jpg
Các regex đúng là /\.(?:jpg|gif)$/i
, và kiểm tra xem các tập tin được tải lên thực sự là một hình ảnh ở phía máy chủ.
Không chắc chắn tại sao điều này lại bị bỏ phiếu xuống. –
bởi vì nó yêu cầu mọi người cá cho anh ta, không dạy anh ta để cá. 3 upvotes thực sự? Đăng một milion "whats regex này có nghĩa là" câu hỏi tôi đoán. –
Tôi đồng ý với Brian, điều này khá lố bịch. –