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

```
(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(?: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.