Questa è un'espressione regolare negativa.
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
Facciamolo parte per parte.
([a-zA-Z]:)
Ciò richiede il percorso del file inizia con una lettera di unità come C:
, d:
, etc.
(\\{2}\w+)\$?)
\\{2}
significa che la barra rovesciata ripetuto due volte (notare le \
necessario fare l'escape), seguito da alcuni caratteri alfanumerici (\w+
), e poi forse un segno del dollaro (\$?
). Questa è la parte host del percorso UNC.
([a-zA-Z]:)|(\\{2}\w+)\$?)
Il |
significa "o". Quindi inizia con una lettera di unità o un percorso UNC. Congratulazioni per aver buttato fuori utenti non Windows.
(\\(\w[\w].*))
Questa dovrebbe la parte di directory del percorso, ma in realtà è 2 caratteri alfanumerici seguiti da nulla, se non nuove linee (.*
), come \[email protected]#*(#$*)
.
La regex corretta per questa parte dovrebbe essere (?:\\\w+)+
(.jpg|.JPG|.gif|.GIF)$
Ciò significa gli ultimi 3 caratteri del percorso devono essere jpg
, JPG
, gif
o GIF
. Si noti che .
è non un punto, ma corrisponde a qualsiasi cifra eccetto lo \n
, quindi verrà passato un nome file come haha.abcgif
o malicious.exe\0gif
.
L'espressione regolare appropriata per questa parte dovrebbe essere \.(?:jpg|JPG|gif|GIF)$
Insieme,
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
corrisponderà
D:\foo.jpg
\\remote$\dummy\..\C:\Windows\System32\Logo.gif
C:\Windows\System32\cmd.exe;--gif
e non riuscirà
/home/user/pictures/myself.jpg
C:\a.jpg
C:\d\e.jpg
L'espressione regolare corretta è /\.(?:jpg|gif)$/i
, e verificare se il file caricato è in realtà un'immagine sul lato server.
Non so perché questo ha un voto negativo. –
perché chiede alle persone di pescarlo, non insegnargli a pescare. 3 upvotes davvero? Posta una milion "cosa significa questo regex" domande credo. –
Sono d'accordo con Brian, questo è abbastanza ridicolo. –