diff --git a/django/core/validators.py b/django/core/validators.py
index d6c4b28..a40af0c 100644
a
|
b
|
class HeadRequest(urllib2.Request):
|
45 | 45 | |
46 | 46 | class URLValidator(RegexValidator): |
47 | 47 | regex = re.compile( |
48 | | r'^https?://' # http:// or https:// |
| 48 | r'^(?:http|ftp)s?://' # http:// or https:// |
49 | 49 | r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain... |
50 | 50 | r'localhost|' #localhost... |
51 | 51 | r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip |
diff --git a/tests/modeltests/validation/tests.py b/tests/modeltests/validation/tests.py
index 142688f..cbd7cb8 100644
a
|
b
|
class BaseModelValidationTests(ValidationTestCase):
|
61 | 61 | mtv = ModelToValidate(number=10, name='Some Name', url='http://www.djangoproject.com/') |
62 | 62 | self.assertEqual(None, mtv.full_clean()) # This will fail if there's no Internet connection |
63 | 63 | |
| 64 | def test_correct_https_url_but_nonexisting(self): |
| 65 | mtv = ModelToValidate(number=10, name='Some Name', url='https://www.djangoproject.com/') |
| 66 | self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.']) |
| 67 | |
| 68 | def test_correct_ftp_url_but_nonexisting(self): |
| 69 | mtv = ModelToValidate(number=10, name='Some Name', url='ftp://ftp.google.com/we-love-microsoft.html') |
| 70 | self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.']) |
| 71 | |
| 72 | def test_correct_ftps_url_but_nonexisting(self): |
| 73 | mtv = ModelToValidate(number=10, name='Some Name', url='ftps://ftp.google.com/we-love-microsoft.html') |
| 74 | self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.']) |
| 75 | |
64 | 76 | def test_text_greater_that_charfields_max_length_raises_erros(self): |
65 | 77 | mtv = ModelToValidate(number=10, name='Some Name'*100) |
66 | 78 | self.assertFailsValidation(mtv.full_clean, ['name',]) |