Si encuentras algún fallo con tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
Su expresión regular parece un poco demasiado compleja en mi opinión. Además, recuerda que el punto es un carácter especial que significa “cualquier carácter”. La siguiente expresión regular debería funcionar (tenga en cuenta los puntos escapados):
^.*.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF)$
Puede usar una herramienta como Expresso para probar sus expresiones regulares.
^.+.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$
Aceptará archivos .doc, .docx, .pdf que tengan un nombre de archivo de al menos un carácter:
^ = beginning of string
.+ = at least one character (any character)
. = dot ('.')
(?:pattern) = match the pattern without storing the match)
[dD] = any character in the set ('d' or 'D')
[xX]? = any character in the set or none
('x' may be missing so 'doc' or 'docx' are both accepted)
| = either the previous or the next pattern
$ = end of matched string
¡Advertencia! Sin encerrar toda la cadena de extensiones en (?:), pasaría una extensión como .docpdf.
Puede probar expresiones regulares en http://www.regextester.com/
¿Está buscando verificar que el archivo tiene una extensión determinada? Puede simplificar lo que está tratando de hacer con algo como esto:
(.*?).(jpg|gif|doc|pdf)$
Luego, cuando llame a IsMatch(), asegúrese de pasar RegexOptions.IgnoreCase como su segundo parámetro. No hay razón para tener que enumerar las variaciones de la carcasa.
Editar: como menciona Dario, esto no funcionará para RegularExpressionValidator, ya que no admite opciones de mayúsculas y minúsculas.
Reseñas y puntuaciones del post
Recuerda que puedes optar por la opción de añadir una evaluación correcta .