diff --git a/src/Symfony/Component/Validator/Constraints/UrlValidator.php b/src/Symfony/Component/Validator/Constraints/UrlValidator.php index 1fc380ea9e..9b0f9de651 100644 --- a/src/Symfony/Component/Validator/Constraints/UrlValidator.php +++ b/src/Symfony/Component/Validator/Constraints/UrlValidator.php @@ -25,7 +25,7 @@ class UrlValidator extends ConstraintValidator const PATTERN = '~^ (%s):// # protocol ( - ([\pL\pN\pS-]+\.)+[\pL]+ # a domain name + ([\pL\pN\pS-]+\.)+([\pL]|xn\-\-[\pL\pN-]+)+ # a domain name | # or \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address | # or diff --git a/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php index b335ae30a8..e74bc18c40 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/UrlValidatorTest.php @@ -91,15 +91,28 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase array('http://[::1]:80/'), array('http://[1:2:3::4:5:6:7]/'), array('http://sãopaulo.com/'), + array('http://xn--sopaulo-xwa.com/'), array('http://sãopaulo.com.br/'), + array('http://xn--sopaulo-xwa.com.br/'), array('http://пример.испытание/'), + array('http://xn--e1afmkfd.xn--80akhbyknj4f/'), array('http://مثال.إختبار/'), + array('http://xn--mgbh0fb.xn--kgbechtv/'), array('http://例子.测试/'), + array('http://xn--fsqu00a.xn--0zwm56d/'), array('http://例子.測試/'), + array('http://xn--fsqu00a.xn--g6w251d/'), array('http://例え.テスト/'), + array('http://xn--r8jz45g.xn--zckzah/'), array('http://مثال.آزمایشی/'), + array('http://xn--mgbh0fb.xn--hgbk6aj7f53bba/'), array('http://실례.테스트/'), + array('http://xn--9n2bp8q.xn--9t4b11yi5a/'), array('http://العربية.idn.icann.org/'), + array('http://xn--ogb.idn.icann.org/'), + array('http://xn--e1afmkfd.xn--80akhbyknj4f.xn--e1afmkfd/'), + array('http://xn--espaa-rta.xn--ca-ol-fsay5a/'), + array('http://xn--d1abbgf6aiiy.xn--p1ai/'), array('http://☎.com/'), ); }