diff --git a/framework/assets/yii.validation.js b/framework/assets/yii.validation.js index 8ed7f61..b663470 100644 --- a/framework/assets/yii.validation.js +++ b/framework/assets/yii.validation.js @@ -81,6 +81,16 @@ yii.validation = (function ($) { valid || messages.push(options.message); }, + regularExpression: function (value, messages, options) { + if (options.skipOnEmpty && isEmpty(value)) { + return; + } + + if (!value.match(options.pattern)) { + messages.push(options.message) + } + }, + email: function (value, messages, options) { if (options.skipOnEmpty && isEmpty(value)) { return; @@ -91,14 +101,18 @@ yii.validation = (function ($) { valid || messages.push(options.message); }, - regularExpression: function (value, messages, options) { + url: function (value, messages, options) { if (options.skipOnEmpty && isEmpty(value)) { return; } + if (options.defaultScheme && !value.match(/:\/\//)) { + value = options.defaultScheme + '://' + value; + } + if (!value.match(options.pattern)) { - messages.push(options.message) + messages.push(options.message); } - } + }, }; })(jQuery); diff --git a/framework/validators/FileValidator.php b/framework/validators/FileValidator.php index b3de0b2..0fddcf5 100644 --- a/framework/validators/FileValidator.php +++ b/framework/validators/FileValidator.php @@ -8,7 +8,6 @@ namespace yii\validators; use Yii; -use yii\helpers\FileHelper; use yii\web\UploadedFile; /** diff --git a/framework/validators/UrlValidator.php b/framework/validators/UrlValidator.php index cd6bfef..0ed59bd 100644 --- a/framework/validators/UrlValidator.php +++ b/framework/validators/UrlValidator.php @@ -8,6 +8,9 @@ namespace yii\validators; use Yii; +use yii\helpers\Html; +use yii\helpers\JsExpression; +use yii\helpers\Json; /** * UrlValidator validates that the attribute value is a valid http or https URL. @@ -100,40 +103,27 @@ class UrlValidator extends Validator */ public function clientValidateAttribute($object, $attribute) { - $message = strtr($this->message, array( - '{attribute}' => $object->getAttributeLabel($attribute), - '{value}' => $object->$attribute, - )); - if (strpos($this->pattern, '{schemes}') !== false) { $pattern = str_replace('{schemes}', '(' . implode('|', $this->validSchemes) . ')', $this->pattern); } else { $pattern = $this->pattern; } - $js = " -if(!value.match($pattern)) { - messages.push(" . json_encode($message) . "); -} -"; - if ($this->defaultScheme !== null) { - $js = " -if(!value.match(/:\\/\\//)) { - value=" . json_encode($this->defaultScheme) . "+'://'+value; -} -$js -"; - } - + $options = array( + 'pattern' => new JsExpression($pattern), + 'message' => Html::encode(strtr($this->message, array( + '{attribute}' => $object->getAttributeLabel($attribute), + '{value}' => $object->$attribute, + ))), + ); if ($this->skipOnEmpty) { - $js = " -if($.trim(value)!='') { - $js -} -"; + $options['skipOnEmpty'] = 1; + } + if ($this->defaultScheme !== null) { + $options['defaultScheme'] = $this->defaultScheme; } - return $js; + return 'yii.validation.url(value, messages, ' . Json::encode($options) . ');'; } }