在我正在处理的表单中,我有我想要验证的规则集。 费率应该是一个浮点数。 价格应为包含,
和.
这是我到目前为止所拥有的
public function rules()
{
array('rate','type', 'type'=>'float', 'on' => 'loan-calculator'),
// EPriceValidator is a custom validation class
array('price', 'site.common.components.validate.EPriceValidator'),
}
在 site.common.components.validate.EPriceValidator 我有这个
class EPriceValidator extends CRegularExpressionValidator
{
public $pattern = '/[^0-9,.]/';
}
当我改变
array('price', 'site.common.components.validate.EPriceValidator'),
到
array('price', 'match', 'not' => true, 'pattern' => '/[^0-9,.]/'),
在动态验证时效果很好。但我宁愿把它放到一个班级,这样我就可以通过我的网站重复使用它。
array('rate','type', 'type'=>'float', 'on' => 'loan-calculator'),
另一方面,上面的代码根本不起作用。知道如何解决这两个问题吗?或者我做错了什么?感谢
答案 0 :(得分:1)
尝试这样的事情
class EPriceValidator extends CValidator
{
//Regular Expressions for numbers
private $pattern = '/[^0-9,.]/';
//Default error messages
private $err_msg = '{attribute} is an invalid.';
/**
* Validates the attribute of the object.
* If there is any error, the error message is added to the object.
* @param CModel $object the object being validated
* @param string $attribute the attribute being validated
*/
protected function validateAttribute($object,$attribute)
{
$pattern = $this->pattern;
// extract the attribute value from it's model object
$value = $object->$attribute;
if(!preg_match($pattern, $value))
{
$this->addError($object, $attribute, $this->err_msg);
}
}
/**
* Implementing Client Validation
*
* Returns the JavaScript needed for performing client-side validation.
* @param CModel $object the data object being validated
* @param string $attribute the name of the attribute to be validated.
* @return string the client-side validation script.
* @see CActiveForm::enableClientValidation
*/
public function clientValidateAttribute($object,$attribute)
{
// check the strength parameter used in the validation rule of our model
$pattern = $this->pattern;
//replace {attribute} with correct label
$params['{attribute}']=$object->getAttributeLabel($attribute);
$error_message = strtr($this->err_msg,$params);
return "
if(value.match(".$pattern.")) {
messages.push(".CJSON::encode($error_message).");
}
";
}
}
validateAttribute()
函数会覆盖用于服务器端验证的CValidator类函数。并且clientValidateAttribute()
函数会覆盖用于客户端验证的CValidator类函数。
了解更多信息read this