Code Review Stack Exchange is a question and answer site for peer programmer code reviews. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What do you think about this?
def is_http_url(s):
    Returns true if s is valid http url, else false 
    - `s`:
    if re.match('https?://(?:www)?(?:[\w-]{2,255}(?:\.\w{2,6}){1,2})(?:/[\w&%?#-]{1,300})?',s):
        return True
        return False
import utils
class TestHttpUrlValidating(unittest.TestCase):
    def test_validating(self):

Is this enough? I'm going to insert URLs into database. Are there other ways to validate it?

share|improve this question
I'd use urlparse in the standard library to check it. – Misandrist Dec 22 '12 at 5:23
You can use the rfc3987 package. rfc3987.match('http://', rule='URI') – PartialOrder Jan 8 '14 at 19:58
up vote 1 down vote accepted

I would check out Django's validator - I'm willing to bet it's going to be decent, and it's going to be very well tested.

regex = re.compile(
    r'^(?:http|ftp)s?://' # http:// or https://
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
    r'localhost|' # localhost...
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4
    r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6
    r'(?::\d+)?' # optional port
    r'(?:/?|[/?]\S+)$', re.IGNORECASE)

This covers a few edge cases like IP addresses and ports. Obviously some stuff (like FTP links) you might not want to accept, but it'd be a good place to start.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.