Browse Source

[Validator] Add support for IDNs and custom TLDs

Jordi Boggiano 14 years ago
parent
commit
c827faf694

+ 2 - 2
src/Symfony/Component/Validator/Constraints/UrlValidator.php

@@ -20,7 +20,7 @@ class UrlValidator extends ConstraintValidator
     const PATTERN = '~^
             (%s)://                                 # protocol
             (
-                ([a-z0-9-]+\.)+[a-z]{2,6}               # a domain name
+                ([\pL\pN-]+\.)+[\pL]+                   # a domain name
                     |                                     #  or
                 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}      # a IP address
                     |                                     #  or
@@ -30,7 +30,7 @@ class UrlValidator extends ConstraintValidator
             )
             (:[0-9]+)?                              # a port (optional)
             (/?|/\S+)                               # a /, nothing or a / with something
-        $~ix';
+        $~ixu';
 
     public function isValid($value, Constraint $constraint)
     {

+ 10 - 0
tests/Symfony/Tests/Component/Validator/Constraints/UrlValidatorTest.php

@@ -73,6 +73,16 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase
             array('http://[::1]/'),
             array('http://[::1]:80/'),
             array('http://[1:2:3::4:5:6:7]/'),
+            array('http://sãopaulo.com/'),
+            array('http://sãopaulo.com.br/'),
+            array('http://пример.испытание/'),
+            array('http://مثال.إختبار/'),
+            array('http://例子.测试/'),
+            array('http://例子.測試/'),
+            array('http://例え.テスト/'),
+            array('http://مثال.آزمایشی/'),
+            array('http://실례.테스트/'),
+            array('http://العربية.idn.icann.org/'),
         );
     }