summaryrefslogtreecommitdiff
path: root/lib/prado/framework/Web/UI/WebControls/TRegularExpressionValidator.php
blob: 426dc83d17b3d8d74930d411f3c692d2e7febb53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/**
 * TRequiredFieldValidator class file
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link https://github.com/pradosoft/prado
 * @copyright Copyright &copy; 2005-2016 The PRADO Group
 * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
 * @package System.Web.UI.WebControls
 */

/**
 * Using TBaseValidator class
 */
Prado::using('System.Web.UI.WebControls.TBaseValidator');

/**
 * TRegularExpressionValidator class
 *
 * TRegularExpressionValidator validates whether the value of an associated
 * input component matches the pattern specified by a regular expression.
 *
 * You can specify the regular expression by setting the {@link setRegularExpression RegularExpression}
 * property. Some commonly used regular expressions include:
 * <pre>
 * French Phone Number: (0( \d|\d ))?\d\d \d\d(\d \d| \d\d )\d\d
 * French Postal Code: \d{5}
 * German Phone Number: ((\(0\d\d\) |(\(0\d{3}\) )?\d )?\d\d \d\d \d\d|\(0\d{4}\) \d \d\d-\d\d?)
 * German Postal Code: (D-)?\d{5}
 * Email Address: \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
 * Japanese Phone Number: (0\d{1,4}-|\(0\d{1,4}\) ?)?\d{1,4}-\d{4}
 * Japanese Postal Code: \d{3}(-(\d{4}|\d{2}))?
 * P.R.C. Phone Number: (\(\d{3}\)|\d{3}-)?\d{8}
 * P.R.C. Postal Code: \d{6}
 * P.R.C. Social Security Number: \d{18}|\d{15}
 * U.S. Phone Number: ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}
 * U.S. ZIP Code: \d{5}(-\d{4})?
 * U.S. Social Security Number: \d{3}-\d{2}-\d{4}
 * </pre>
 *
 * Note, the validation succeeds if the associated input control contains empty input.
 * Use a {@link TRequiredFieldValidator} to ensure the input is not empty.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @package System.Web.UI.WebControls
 * @since 3.0
 */
class TRegularExpressionValidator extends TBaseValidator
{
	/**
	 * Gets the name of the javascript class responsible for performing validation for this control.
	 * This method overrides the parent implementation.
	 * @return string the javascript class name
	 */
	protected function getClientClassName()
	{
		return 'Prado.WebUI.TRegularExpressionValidator';
	}

	/**
	 * @return string the regular expression that determines the pattern used to validate a field.
	 */
	public function getRegularExpression()
	{
		return $this->getViewState('RegularExpression','');
	}

	/**
	 * @param string the regular expression that determines the pattern used to validate a field.
	 */
	public function setRegularExpression($value)
	{
		$this->setViewState('RegularExpression',$value,'');
	}

	/**
	 * This method overrides the parent's implementation.
	 * The validation succeeds if the input data matches the regular expression.
	 * The validation always succeeds if ControlToValidate is not specified
	 * or the regular expression is empty, or the input data is empty.
	 * @return boolean whether the validation succeeds
	 */
	public function evaluateIsValid()
	{
		if(($value=$this->getValidationValue($this->getValidationTarget()))==='')
			return true;
		if(($expression=addcslashes($this->getRegularExpression(),"/"))!=='')
		{
			$mods = $this->getPatternModifiers();
			return preg_match("/^$expression\$/{$mods}",$value);
		}
		else
			return true;
	}

	/**
	 * @param string pattern modifiers for server side validation,
	 * see http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
	 */
	public function setPatternModifiers($value)
	{
		$this->setViewState('PatternModifiers', $value);
	}

	/**
	 * @return string pattern modifiers, no modifiers by default.
	 */
	public function getPatternModifiers()
	{
		return $this->getViewState('PatternModifiers', '');
	}

	/**
	 * @param string pattern modifiers for clientside.
	 * (Only 'g','i' and 'm' are available.)
	 */
	public function setClientSidePatternModifiers($value)
	{
		$this->setViewState('ClientSidePatternModifiers', $value);
	}

	/**
	 * @return string clientside pattern modifiers, no modifiers by default.
	 */
	public function getClientSidePatternModifiers()
	{
		return $this->getViewState('ClientSidePatternModifiers', '');
	}

	/**
	 * Returns an array of javascript validator options.
	 * @return array javascript validator options.
	 */
	protected function getClientScriptOptions()
	{
		$options = parent::getClientScriptOptions();
		$options['ValidationExpression']=$this->getRegularExpression();
		$options['PatternModifiers']=$this->getClientSidePatternModifiers();
		return $options;
	}
}