Index: library/Zend/Validate/Isbn.php =================================================================== --- library/Zend/Validate/Isbn.php (revision 20329) +++ library/Zend/Validate/Isbn.php (working copy) @@ -102,13 +102,15 @@ // prepare separator and pattern list $sep = quotemeta($this->_separator); $patterns = array(); + $stringlength = array(); // check for ISBN-10 if ($this->_type == self::ISBN10 || $this->_type == self::AUTO) { if (empty($sep)) { - $pattern = '^[0-9]{9}[0-9X]{1}$'; + $pattern = '/^[0-9]{9}[0-9X]{1}$/'; } else { - $pattern = "^[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9X]{1}\${13}"; + $pattern = "/^[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9X]{1}\$/"; + $stringlength[$pattern] = 13; } $patterns[$pattern] = self::ISBN10; } @@ -116,17 +118,23 @@ // check for ISBN-13 if ($this->_type == self::ISBN13 || $this->_type == self::AUTO) { if (empty($sep)) { - $pattern = '^[0-9]{13}$'; + $pattern = '/^[0-9]{13}$/'; } else { - $pattern = "^[0-9]{1,9}[{$sep}]{1}[0-9]{1,5}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1}\${17}"; + $pattern = "/^[0-9]{1,9}[{$sep}]{1}[0-9]{1,5}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1}\$/"; + $stringlength[$pattern] = 17; } $patterns[$pattern] = self::ISBN13; } // check pattern list foreach ($patterns as $pattern => $type) { - if (ereg($pattern, $this->_value) == 1) { - return $type; + if (preg_match($pattern, $this->_value) == 1) { + if (isset($stringlength[$pattern]) + && $stringlength[$pattern] == strlen($this->_value)) { + return $type; + } elseif(!isset($stringlength[$pattern])) { + return $type; + } } } return null;