Packages

  • Nette
    • Application
    • Caching
    • Collections
    • Config
    • Forms
    • IO
    • Loaders
    • Mail
    • Reflection
    • Security
    • Templates
    • Web
  • None
  • PHP

Classes

  • NButton
  • NCheckbox
  • NConventionalRenderer
  • NFileUpload
  • NForm
  • NFormContainer
  • NFormGroup
  • NHiddenField
  • NImageButton
  • NInstantClientScript
  • NMultiSelectBox
  • NRadioList
  • NRule
  • NRules
  • NSelectBox
  • NSubmitButton
  • NTextArea
  • NTextBase
  • NTextInput

Interfaces

  • IFormControl
  • IFormRenderer
  • INamingContainer
  • ISubmitterControl
  • Overview
  • Package
  • Class
  • Tree
  • Other releases
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (https://nette.org)
  5:  *
  6:  * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
  7:  *
  8:  * For the full copyright and license information, please view
  9:  * the file license.txt that was distributed with this source code.
 10:  * @package Nette\Forms
 11:  */
 12: 
 13: 
 14: 
 15: /**
 16:  * Implements the basic functionality common to text input controls.
 17:  *
 18:  * @author     David Grudl
 19:  *
 20:  * @property   string $emptyValue
 21:  * @package Nette\Forms
 22:  */
 23: abstract class NTextBase extends NFormControl
 24: {
 25:     /** @var string */
 26:     protected $emptyValue = '';
 27: 
 28:     /** @var array */
 29:     protected $filters = array();
 30: 
 31: 
 32: 
 33:     /**
 34:      * Sets control's value.
 35:      * @param  string
 36:      * @return NTextBase  provides a fluent interface
 37:      */
 38:     public function setValue($value)
 39:     {
 40:         $this->value = is_scalar($value) ? (string) $value : '';
 41:         return $this;
 42:     }
 43: 
 44: 
 45: 
 46:     /**
 47:      * Returns control's value.
 48:      * @return string
 49:      */
 50:     public function getValue()
 51:     {
 52:         $value = $this->value;
 53:         foreach ($this->filters as $filter) {
 54:             $value = (string) $filter->invoke($value);
 55:         }
 56:         return $value === $this->translate($this->emptyValue) ? '' : $value;
 57:     }
 58: 
 59: 
 60: 
 61:     /**
 62:      * Sets the special value which is treated as empty string.
 63:      * @param  string
 64:      * @return NTextBase  provides a fluent interface
 65:      */
 66:     public function setEmptyValue($value)
 67:     {
 68:         $this->emptyValue = (string) $value;
 69:         return $this;
 70:     }
 71: 
 72: 
 73: 
 74:     /**
 75:      * Returns the special value which is treated as empty string.
 76:      * @return string
 77:      */
 78:     final public function getEmptyValue()
 79:     {
 80:         return $this->emptyValue;
 81:     }
 82: 
 83: 
 84: 
 85:     /**
 86:      * Appends input string filter callback.
 87:      * @param  callback
 88:      * @return NTextBase  provides a fluent interface
 89:      */
 90:     public function addFilter($filter)
 91:     {
 92:         $this->filters[] = callback($filter);
 93:         return $this;
 94:     }
 95: 
 96: 
 97: 
 98:     public function notifyRule(NRule $rule)
 99:     {
100:         if (is_string($rule->operation) && strcasecmp($rule->operation, ':float') === 0) {
101:             $this->addFilter(array(__CLASS__, 'filterFloat'));
102:         }
103: 
104:         parent::notifyRule($rule);
105:     }
106: 
107: 
108: 
109:     /**
110:      * Min-length validator: has control's value minimal length?
111:      * @param  NTextBase
112:      * @param  int  length
113:      * @return bool
114:      */
115:     public static function validateMinLength(NTextBase $control, $length)
116:     {
117:         return iconv_strlen($control->getValue(), 'UTF-8') >= $length;
118:     }
119: 
120: 
121: 
122:     /**
123:      * Max-length validator: is control's value length in limit?
124:      * @param  NTextBase
125:      * @param  int  length
126:      * @return bool
127:      */
128:     public static function validateMaxLength(NTextBase $control, $length)
129:     {
130:         return iconv_strlen($control->getValue(), 'UTF-8') <= $length;
131:     }
132: 
133: 
134: 
135:     /**
136:      * Length validator: is control's value length in range?
137:      * @param  NTextBase
138:      * @param  array  min and max length pair
139:      * @return bool
140:      */
141:     public static function validateLength(NTextBase $control, $range)
142:     {
143:         if (!is_array($range)) {
144:             $range = array($range, $range);
145:         }
146:         $len = iconv_strlen($control->getValue(), 'UTF-8');
147:         return ($range[0] === NULL || $len >= $range[0]) && ($range[1] === NULL || $len <= $range[1]);
148:     }
149: 
150: 
151: 
152:     /**
153:      * Email validator: is control's value valid email address?
154:      * @param  NTextBase
155:      * @return bool
156:      */
157:     public static function validateEmail(NTextBase $control)
158:     {
159:         $atom = "[-a-z0-9!#$%&'*+/=?^_`{|}~]"; // RFC 5322 unquoted characters in local-part
160:         $localPart = "(\"([ !\\x23-\\x5B\\x5D-\\x7E]*|\\\\[ -~])+\"|$atom+(\\.$atom+)*)"; // quoted or unquoted
161:         $chars = "a-z0-9\x80-\xFF"; // superset of IDN
162:         $domain = "[$chars]([-$chars]{0,61}[$chars])"; // RFC 1034 one domain component
163:         return (bool) preg_match("(^$localPart@($domain?\\.)+[-$chars]{2,19}\\z)i", $control->getValue());
164:     }
165: 
166: 
167: 
168:     /**
169:      * URL validator: is control's value valid URL?
170:      * @param  NTextBase
171:      * @return bool
172:      */
173:     public static function validateUrl(NTextBase $control)
174:     {
175:         return (bool) preg_match('/^.+\.[a-z]{2,6}(\\/.*)?$/i', $control->getValue());
176:     }
177: 
178: 
179: 
180:     /**
181:      * Regular expression validator: matches control's value regular expression?
182:      * @param  NTextBase
183:      * @param  string
184:      * @return bool
185:      */
186:     public static function validateRegexp(NTextBase $control, $regexp)
187:     {
188:         return (bool) preg_match($regexp, $control->getValue());
189:     }
190: 
191: 
192: 
193:     /**
194:      * Integer validator: is a control's value decimal number?
195:      * @param  NTextBase
196:      * @return bool
197:      */
198:     public static function validateInteger(NTextBase $control)
199:     {
200:         return (bool) preg_match('/^-?[0-9]+$/', $control->getValue());
201:     }
202: 
203: 
204: 
205:     /**
206:      * Float validator: is a control's value float number?
207:      * @param  NTextBase
208:      * @return bool
209:      */
210:     public static function validateFloat(NTextBase $control)
211:     {
212:         return (bool) preg_match('/^-?[0-9]*[.,]?[0-9]+$/', $control->getValue());
213:     }
214: 
215: 
216: 
217:     /**
218:      * Rangle validator: is a control's value number in specified range?
219:      * @param  NTextBase
220:      * @param  array  min and max value pair
221:      * @return bool
222:      */
223:     public static function validateRange(NTextBase $control, $range)
224:     {
225:         return ($range[0] === NULL || $control->getValue() >= $range[0]) && ($range[1] === NULL || $control->getValue() <= $range[1]);
226:     }
227: 
228: 
229: 
230:     /**
231:      * Float string cleanup.
232:      * @param  string
233:      * @return string
234:      */
235:     public static function filterFloat($s)
236:     {
237:         return str_replace(array(' ', ','), array('', '.'), $s);
238:     }
239: 
240: }
241: 
Nette Framework 0.9.7 (for PHP 5.2) API documentation generated by ApiGen 2.3.0