File indexing completed on 2024-12-22 05:37:12
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_Validate 0017 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0018 * @license http://framework.zend.com/license/new-bsd New BSD License 0019 * @version $Id$ 0020 */ 0021 0022 /** 0023 * @see Zend_Validate_Abstract 0024 */ 0025 // require_once 'Zend/Validate/Abstract.php'; 0026 0027 /** 0028 * @category Zend 0029 * @package Zend_Validate 0030 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0031 * @license http://framework.zend.com/license/new-bsd New BSD License 0032 */ 0033 class Zend_Validate_StringLength extends Zend_Validate_Abstract 0034 { 0035 const INVALID = 'stringLengthInvalid'; 0036 const TOO_SHORT = 'stringLengthTooShort'; 0037 const TOO_LONG = 'stringLengthTooLong'; 0038 0039 /** 0040 * @var array 0041 */ 0042 protected $_messageTemplates = array( 0043 self::INVALID => "Invalid type given. String expected", 0044 self::TOO_SHORT => "'%value%' is less than %min% characters long", 0045 self::TOO_LONG => "'%value%' is more than %max% characters long", 0046 ); 0047 0048 /** 0049 * @var array 0050 */ 0051 protected $_messageVariables = array( 0052 'min' => '_min', 0053 'max' => '_max' 0054 ); 0055 0056 /** 0057 * Minimum length 0058 * 0059 * @var integer 0060 */ 0061 protected $_min; 0062 0063 /** 0064 * Maximum length 0065 * 0066 * If null, there is no maximum length 0067 * 0068 * @var integer|null 0069 */ 0070 protected $_max; 0071 0072 /** 0073 * Encoding to use 0074 * 0075 * @var string|null 0076 */ 0077 protected $_encoding; 0078 0079 /** 0080 * Sets validator options 0081 * 0082 * @param integer|array|Zend_Config $options 0083 */ 0084 public function __construct($options = array()) 0085 { 0086 if ($options instanceof Zend_Config) { 0087 $options = $options->toArray(); 0088 } else if (!is_array($options)) { 0089 $options = func_get_args(); 0090 $temp['min'] = array_shift($options); 0091 if (!empty($options)) { 0092 $temp['max'] = array_shift($options); 0093 } 0094 0095 if (!empty($options)) { 0096 $temp['encoding'] = array_shift($options); 0097 } 0098 0099 $options = $temp; 0100 } 0101 0102 if (!array_key_exists('min', $options)) { 0103 $options['min'] = 0; 0104 } 0105 0106 $this->setMin($options['min']); 0107 if (array_key_exists('max', $options)) { 0108 $this->setMax($options['max']); 0109 } 0110 0111 if (array_key_exists('encoding', $options)) { 0112 $this->setEncoding($options['encoding']); 0113 } 0114 } 0115 0116 /** 0117 * Returns the min option 0118 * 0119 * @return integer 0120 */ 0121 public function getMin() 0122 { 0123 return $this->_min; 0124 } 0125 0126 /** 0127 * Sets the min option 0128 * 0129 * @param integer $min 0130 * @throws Zend_Validate_Exception 0131 * @return Zend_Validate_StringLength Provides a fluent interface 0132 */ 0133 public function setMin($min) 0134 { 0135 if (null !== $this->_max && $min > $this->_max) { 0136 /** 0137 * @see Zend_Validate_Exception 0138 */ 0139 // require_once 'Zend/Validate/Exception.php'; 0140 throw new Zend_Validate_Exception("The minimum must be less than or equal to the maximum length, but $min >" 0141 . " $this->_max"); 0142 } 0143 $this->_min = max(0, (integer) $min); 0144 return $this; 0145 } 0146 0147 /** 0148 * Returns the max option 0149 * 0150 * @return integer|null 0151 */ 0152 public function getMax() 0153 { 0154 return $this->_max; 0155 } 0156 0157 /** 0158 * Sets the max option 0159 * 0160 * @param integer|null $max 0161 * @throws Zend_Validate_Exception 0162 * @return Zend_Validate_StringLength Provides a fluent interface 0163 */ 0164 public function setMax($max) 0165 { 0166 if (null === $max) { 0167 $this->_max = null; 0168 } else if ($max < $this->_min) { 0169 /** 0170 * @see Zend_Validate_Exception 0171 */ 0172 // require_once 'Zend/Validate/Exception.php'; 0173 throw new Zend_Validate_Exception("The maximum must be greater than or equal to the minimum length, but " 0174 . "$max < $this->_min"); 0175 } else { 0176 $this->_max = (integer) $max; 0177 } 0178 0179 return $this; 0180 } 0181 0182 /** 0183 * Returns the actual encoding 0184 * 0185 * @return string 0186 */ 0187 public function getEncoding() 0188 { 0189 return $this->_encoding; 0190 } 0191 0192 /** 0193 * Sets a new encoding to use 0194 * 0195 * @param string $encoding 0196 * @throws Zend_Validate_Exception 0197 * @return Zend_Validate_StringLength 0198 */ 0199 public function setEncoding($encoding = null) 0200 { 0201 if ($encoding !== null) { 0202 $orig = PHP_VERSION_ID < 50600 0203 ? iconv_get_encoding('internal_encoding') 0204 : ini_get('default_charset'); 0205 if (PHP_VERSION_ID < 50600) { 0206 if ($encoding) { 0207 $result = iconv_set_encoding('internal_encoding', $encoding); 0208 } else { 0209 $result = false; 0210 } 0211 } else { 0212 ini_set('default_charset', $encoding); 0213 $result = ini_get('default_charset'); 0214 } 0215 if (!$result) { 0216 // require_once 'Zend/Validate/Exception.php'; 0217 throw new Zend_Validate_Exception('Given encoding not supported on this OS!'); 0218 } 0219 0220 if (PHP_VERSION_ID < 50600) { 0221 iconv_set_encoding('internal_encoding', $orig); 0222 } else { 0223 ini_set('default_charset', $orig); 0224 } 0225 } 0226 $this->_encoding = $encoding; 0227 return $this; 0228 } 0229 0230 /** 0231 * Defined by Zend_Validate_Interface 0232 * 0233 * Returns true if and only if the string length of $value is at least the min option and 0234 * no greater than the max option (when the max option is not null). 0235 * 0236 * @param string $value 0237 * @return boolean 0238 */ 0239 public function isValid($value) 0240 { 0241 if (!is_string($value)) { 0242 $this->_error(self::INVALID); 0243 return false; 0244 } 0245 0246 $this->_setValue($value); 0247 if ($this->_encoding !== null) { 0248 $length = iconv_strlen($value, $this->_encoding); 0249 } else { 0250 $length = iconv_strlen($value); 0251 } 0252 0253 if ($length < $this->_min) { 0254 $this->_error(self::TOO_SHORT); 0255 } 0256 0257 if (null !== $this->_max && $this->_max < $length) { 0258 $this->_error(self::TOO_LONG); 0259 } 0260 0261 if (count($this->_messages)) { 0262 return false; 0263 } else { 0264 return true; 0265 } 0266 } 0267 }