Просмотр исходного кода

Merge pull request #116 from siad007/zendValidateHostnameCA

Adds canadian support for Zend_Validate_Hostname
Frank Brückner 12 лет назад
Родитель
Сommit
8693338a2f
2 измененных файлов с 24 добавлено и 8 удалено
  1. 6 4
      library/Zend/Validate/Hostname.php
  2. 18 4
      tests/Zend/Validate/HostnameTest.php

+ 6 - 4
library/Zend/Validate/Hostname.php

@@ -151,6 +151,7 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
      * (.BIZ) International http://www.iana.org/domains/idn-tables/
      * (.BR) Brazil http://registro.br/faq/faq6.html
      * (.BV) Bouvett Island http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+     * (.CA) Canada http://www.iana.org/domains/idn-tables/tables/ca_fr_1.0.html
      * (.CAT) Catalan http://www.iana.org/domains/idn-tables/tables/cat_ca_1.0.html
      * (.CH) Switzerland https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
      * (.CL) Chile http://www.iana.org/domains/idn-tables/tables/cl_latn_1.0.html
@@ -199,6 +200,7 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
         'BIZ' => 'Hostname/Biz.php',
         'BR'  => array(1 => '/^[\x{002d}0-9a-zà-ãçéíó-õúü]{1,63}$/iu'),
         'BV'  => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
+        'CA'  => array(1 => '/^[\x{002d}0-9a-zàâæçéèêëîïôœùûüÿ\x{00E0}\x{00E2}\x{00E7}\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{00EE}\x{00EF}\x{00F4}\x{00F9}\x{00FB}\x{00FC}\x{00E6}\x{0153}\x{00FF}]{1,63}$/iu'),
         'CAT' => array(1 => '/^[\x{002d}0-9a-z·àç-éíïòóúü]{1,63}$/iu'),
         'CH'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'),
         'CL'  => array(1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'),
@@ -517,14 +519,14 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
         }
 
         // RFC3986 3.2.2 states:
-        // 
+        //
         //     The rightmost domain label of a fully qualified domain name
-        //     in DNS may be followed by a single "." and should be if it is 
+        //     in DNS may be followed by a single "." and should be if it is
         //     necessary to distinguish between the complete domain name and
         //     some local domain.
-        //     
+        //
         // (see ZF-6363)
-        
+
         // Local hostnames are allowed to be partitial (ending '.')
         if ($this->_options['allow'] & self::ALLOW_LOCAL) {
             if (substr($value, -1) === '.') {

+ 18 - 4
tests/Zend/Validate/HostnameTest.php

@@ -423,7 +423,7 @@ class Zend_Validate_HostnameTest extends PHPUnit_Framework_TestCase
             }
         }
     }
-    
+
     /**
      * @group ZF-11334
      * @see http://www.ietf.org/rfc/rfc2732.txt
@@ -431,7 +431,7 @@ class Zend_Validate_HostnameTest extends PHPUnit_Framework_TestCase
     public function testSupportsIpv6AddressesWhichContainHexDigitF()
     {
         $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_ALL);
-        
+
         $this->assertTrue($validator->isValid('FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'));
         $this->assertTrue($validator->isValid('1080:0:0:0:8:800:200C:417A'));
         $this->assertTrue($validator->isValid('3ffe:2a00:100:7031::1'));
@@ -440,14 +440,14 @@ class Zend_Validate_HostnameTest extends PHPUnit_Framework_TestCase
         $this->assertTrue($validator->isValid('::FFFF:129.144.52.38'));
         $this->assertTrue($validator->isValid('2010:836B:4179::836B:4179'));
     }
-    
+
     /**
      * @group ZF-11796
      */
     public function testIDNSI()
     {
         $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_ALL);
-        
+
         $this->assertTrue($validator->isValid('Test123.si'));
         $this->assertTrue($validator->isValid('țest123.si'));
         $this->assertTrue($validator->isValid('tĕst123.si'));
@@ -462,4 +462,18 @@ class Zend_Validate_HostnameTest extends PHPUnit_Framework_TestCase
         $this->assertTrue($this->_validator->isValid('testæøå.dk'));
     }
 
+    /**
+     * test for IDN CA
+     */
+    public function testIDNCA()
+    {
+        $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_ALL);
+
+        $this->assertTrue($validator->isValid('Test123.ca'));
+        $this->assertTrue($validator->isValid('tàr.ca'));
+        $this->assertFalse($validator->isValid('țest123.ca'));
+        $this->assertFalse($validator->isValid('tĕst123.ca'));
+        $this->assertFalse($validator->isValid('رات.ca'));
+    }
+
 }