Skip to content

Commit

Permalink
[1.2.X] Fixed #12988 -- Extended regular expression of the URLValidat…
Browse files Browse the repository at this point in the history
…or to fully support IDN-URLs, especially the long TLDs.

Backport from trunk (r15502).

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15509 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jezdez committed Feb 12, 2011
1 parent 48fe609 commit 90ee3af
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 9 deletions.
2 changes: 1 addition & 1 deletion django/core/validators.py
Expand Up @@ -41,7 +41,7 @@ def __call__(self, value):
class URLValidator(RegexValidator):
regex = re.compile(
r'^https?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' #domain...
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 ip
r'(?::\d+)?' # optional port
Expand Down
35 changes: 27 additions & 8 deletions tests/regressiontests/forms/tests/fields.py
Expand Up @@ -567,13 +567,6 @@ def test_urlfield_3(self):
f.clean('http://google.com/we-love-microsoft.html') # good domain, bad page
except ValidationError, e:
self.assertEqual("[u'This URL appears to be a broken link.']", str(e))
# Valid and existent IDN
self.assertEqual(u'http://\u05e2\u05d1\u05e8\u05d9\u05ea.idn.icann.org/', f.clean(u'http://עברית.idn.icann.org/'))
# Valid but non-existent IDN
try:
f.clean(u'http://broken.עברית.idn.icann.org/')
except ValidationError, e:
self.assertEqual("[u'This URL appears to be a broken link.']", str(e))

def test_urlfield_4(self):
f = URLField(verify_exists=True, required=False)
Expand All @@ -597,10 +590,36 @@ def test_urlfield_7(self):
self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
self.assertEqual(u'http://example.com/test', f.clean('http://example.com/test'))

def test_urlfield_ticket11826(self):
def test_urlfield_8(self):
# ticket #11826
f = URLField()
self.assertEqual(u'http://example.com/?some_param=some_value', f.clean('http://example.com?some_param=some_value'))

def test_urlfield_9(self):
f = URLField(verify_exists=False)
urls = (
u'http://עברית.idn.icann.org/',
u'http://sãopaulo.com/',
u'http://sãopaulo.com.br/',
u'http://пример.испытание/',
u'http://مثال.إختبار/',
u'http://例子.测试/',
u'http://例子.測試/',
u'http://उदाहरण.परीक्षा/',
u'http://例え.テスト/',
u'http://مثال.آزمایشی/',
u'http://실례.테스트/',
u'http://العربية.idn.icann.org/',
)
for url in urls:
# Valid and existent IDN
self.assertEqual(url, f.clean(url))
# Valid but non-existent IDN
try:
f.clean(u'http://broken.עברית.idn.icann.org/')
except ValidationError, e:
self.assertEqual("[u'This URL appears to be a broken link.']", str(e))

# BooleanField ################################################################

def test_booleanfield_1(self):
Expand Down

0 comments on commit 90ee3af

Please sign in to comment.