* @copyright 2001-2009 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @version CVS: $Id: Compare.php,v 1.7 2009/04/04 21:34:04 avb Exp $ * @link http://pear.php.net/package/HTML_QuickForm */ /** * Rule to compare two form fields * * The most common usage for this is to ensure that the password * confirmation field matches the password field * * @category HTML * @package HTML_QuickForm * @author Alexey Borzov * @version Release: 3.2.11 * @since 3.2 */ class HTML_QuickForm_Rule_Compare extends HTML_QuickForm_Rule { /** * Possible operators to use * @var array * @access private */ public $_operators = array( 'eq' => '===', 'neq' => '!==', 'gt' => '>', 'gte' => '>=', 'lt' => '<', 'lte' => '<=', '==' => '===', '!=' => '!==' ); /** * Returns the operator to use for comparing the values * * @access private * @param string operator name * @return string operator to use for validation */ public function _findOperator($name) { $name = trim($name); if (empty($name)) { return '==='; } elseif (isset($this->_operators[$name])) { return $this->_operators[$name]; } elseif (in_array($name, $this->_operators)) { return $name; } else { return '==='; } } /** * @param array $values * @param string $operator * @return mixed */ public function validate($values, $operator = null) { $operator = $this->_findOperator($operator); $a = $values[0]; $b = $values[1]; if ('===' != $operator && '!==' != $operator) { $a = floatval($a); $b = floatval($b); } else { $a = strval($a); $b = strval($b); } switch ($operator) { case '===': return $a === $b; break; case '!==': return $a !== $b; break; case '>': return $a > $b; break; case '>=': return $a >= $b; break; case '<': return $a < $b; break; case '<=': return $a <= $b; break; } } public function getValidationScript($operator = null) { $operator = $this->_findOperator($operator); if ('===' != $operator && '!==' != $operator) { $check = "!(Number({jsVar}[0]) {$operator} Number({jsVar}[1]))"; } else { $check = "!(String({jsVar}[0]) {$operator} String({jsVar}[1]))"; } return array('', "'' != {jsVar}[0] && {$check}"); } }