Regex to check if valid URL that ends in .jpg, .png, or .gif

perl, regex

Solution

(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(?:jpg|gif|png))(?:\?([^#]*))?(?:#(.*))?

That's a (slightly modified) version of the official URI parsing regexp from RFC 2396. It allows for `#fragments` and `?querystrings` to appear after the filename, which may or may not be what you want. It also matches any valid domain, including `localhost`, which again might not be what you want, but it could be modified.

A more traditional regexp for this might look like the below.

^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$
          |-------- domain -----------|--- path ---|-- extension ---|

EDIT See my other comment, which although isn't answering the question as completely as this one, I feel it's probably a more useful in this case. However, I'm leaving this here for karma-whoring completeness reasons.

Problem

I would like users to submit a URL that is valid but also is an image, ending with .jpg, .png, or .gif.

Original source

Related problems