Esto es una mala expresión regular.
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
Hagámoslo parte por parte.
([a-zA-Z]:)
Esto requiere la ruta del archivo comienza con un letraUnidad como C:
, d:
, etc.
(\\{2}\w+)\$?)
\\{2}
significa que la barra invertida repite dos veces (tenga en cuenta las necesidades \
ser escapado), seguido de algunos caracteres alfanuméricos (\w+
), y luego tal vez un signo de dólar (\$?
). Esta es la parte de host de la ruta UNC.
([a-zA-Z]:)|(\\{2}\w+)\$?)
El |
significa "o". Entonces, o bien comienza con una letra de unidad o una ruta UNC. Felicitaciones por expulsar a los usuarios que no son de Windows.
(\\(\w[\w].*))
Esto si la parte del directorio de la ruta, pero en realidad es de 2 caracteres alfanuméricos seguidos por nada, salvo nuevas líneas (.*
), como \[email protected]#*(#$*)
.
La expresión regular correcta para esta parte debe ser (?:\\\w+)+
(.jpg|.JPG|.gif|.GIF)$
Esto significa que los 3 últimos caracteres de la ruta debe ser jpg
, JPG
, gif
o GIF
. Tenga en cuenta que .
es no un punto, pero coincide con cualquier cosa excepto \n
, por lo que un nombre de archivo como haha.abcgif
o malicious.exe\0gif
pasará.
La expresión regular correcta para esta parte debe ser \.(?:jpg|JPG|gif|GIF)$
Juntos,
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
coincidirá con
D:\foo.jpg
\\remote$\dummy\..\C:\Windows\System32\Logo.gif
C:\Windows\System32\cmd.exe;--gif
y se producirá un error
/home/user/pictures/myself.jpg
C:\a.jpg
C:\d\e.jpg
La expresión regular es correcta /\.(?:jpg|gif)$/i
, y comprobar si el archivo subido es realmente una imagen en el lado del servidor.
No estoy seguro de por qué esto tiene un voto hacia abajo. –
porque es pedirle a la gente que pesque para él, no enseñarle a pescar. 3 upvotes realmente? Publique un millón de preguntas sobre "qué significa esta expresión regular", supongo. –
Estoy de acuerdo con Brian, esto es bastante ridículo. –