I think we should radically simplify this url regex. We don't show urls on the site, so we can be looser here. For example, it doesn't need to reject ip addresses. What it does need to do is a simple validation pass to catch the basic cases where the url is definitely not a valid url. e.g. "my mom's internet connect" is not a valid url. If the user submits that, we'll throw it away. Better to let the user know it's not valid so they can fix it.

Also, this is a pretty complex regex. We really need a way to programmatically test it. I was thinking that if we re-used the regex used in Django then we could be "ok". But if we're not going to use that, then we need to have unit tests for it.