/**
  * @param \Phalcon\Validation $validation
  * @param string              $field
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     if (!is_string($field)) {
         throw new \Phalcon\Validation\Exception("Field name must be a string");
     }
     $label = $this->getOption("label");
     if (empty($label)) {
         $label = $validation->getLabel($field);
     }
     $value = $validation->getValue($field);
     if ($this->isSetOption("allowEmpty") && empty($value)) {
         return true;
     }
     // http://stackoverflow.com/questions/1418423/the-hostname-regex
     if (!preg_match('/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/', $value)) {
         $message = $this->getOption("message");
         if (empty($message)) {
             $message = "Field :field is not a valid hostname";
         }
         $replacePairs = [":field" => $label];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Hostname"));
         return false;
     }
     return true;
 }
Example #2
0
 /**
  * Executes the validation
  *
  * @package     base-app
  * @version     2.0
  *
  * @param object $validation Phalcon\Validation
  * @param string $field field name
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     $model = $this->getOption("model");
     $attribute = $this->getOption("attribute");
     if (empty($model)) {
         throw new \Phalcon\Validation\Exception("Model must be set");
     }
     if (empty($attribute)) {
         $attribute = $field;
     }
     if ($except = $this->getOption('except')) {
         $number = $model::count(array($attribute . "=:value: AND " . $attribute . "!= :except:", "bind" => array("value" => $value, 'except' => $except)));
     } else {
         $number = $model::count(array($attribute . "=:value:", "bind" => array("value" => $value)));
     }
     if ($number) {
         $label = $this->getOption("label");
         if (empty($label)) {
             $label = $validation->getLabel($field);
             if (empty($label)) {
                 $label = $field;
             }
         }
         $message = $this->getOption("message");
         $replacePairs = array(":field" => $label);
         if (empty($message)) {
             $message = $validation->getDefaultMessage("Uniqueness");
         }
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Uniqueness"));
         return false;
     }
     return true;
 }
Example #3
0
 /**
  * {@inheritdoc}
  *
  * @param Validation $validation
  * @param string $attribute
  *
  * @return bool
  * @throws Exception
  */
 public function validate(Validation $validation, $attribute)
 {
     $value = $validation->getValue($attribute);
     $field = $this->getOption('label');
     if (empty($field)) {
         $validation->getLabel($attribute);
     }
     if (false === $this->hasOption('places')) {
         throw new Exception('A number of decimal places must be set');
     }
     if ($this->hasOption('digits')) {
         // Specific number of digits
         $digits = '{' . (int) $this->getOption('digits') . '}';
     } else {
         // Any number of digits
         $digits = '+';
     }
     if ($this->hasOption('point')) {
         $decimal = $this->getOption('point');
     } else {
         // Get the decimal point for the current locale
         list($decimal) = array_values(localeconv());
     }
     $result = (bool) preg_match(sprintf('#^[+-]?[0-9]%s%s[0-9]{%d}$#', $digits, preg_quote($decimal), $this->getOption('places')), $value);
     if (!$result) {
         $message = $this->getOption('message');
         $replacePairs = [':field' => $field];
         if (empty($message)) {
             $message = ':field must contain valid decimal value';
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $attribute, 'Decimal'));
         return false;
     }
     return true;
 }
Example #4
0
 /**
  * {@inheritdoc}
  *
  * @param Validation $validation
  * @param string     $attribute
  *
  * @return bool
  */
 public function validate(Validation $validation, $attribute)
 {
     $secret = $this->getOption('secret');
     $value = $validation->getValue($attribute);
     $request = $validation->getDI()->get('request');
     $remoteIp = $request->getClientAddress(false);
     if (!empty($value)) {
         $curl = curl_init(self::RECAPTCHA_URL);
         curl_setopt_array($curl, [CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => ['secret' => $secret, 'response' => $value, 'remoteip' => $remoteIp]]);
         $response = json_decode(curl_exec($curl), true);
         curl_close($curl);
     }
     if (empty($response['success'])) {
         $label = $this->getOption('label');
         if (empty($label)) {
             $label = $validation->getLabel($attribute);
         }
         $message = $this->getOption('message');
         $replacePairs = [':field', $label];
         if (empty($message) && !empty($response['error-codes'])) {
             $message = $this->messages[$response['error-codes']];
         }
         if (empty($message)) {
             $message = $validation->getDefaultMessage('ReCaptcha');
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $attribute, 'ReCaptcha'));
         return false;
     }
     return true;
 }
Example #5
0
 /**
  * 校验大小
  *
  * @param Validation $validation
  * @param string     $field
  * @return bool
  */
 public function validate(Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     $size = $this->getOption('size');
     //判断是否为数字
     if (is_numeric($value)) {
         if ($value != $size) {
             $label = $this->getOption("label");
             if (!$label) {
                 $label = $validation->getLabel($field);
             }
             $message = $this->getOption("message");
             $replacePairs = [':field' => $label, ':size' => $size];
             if (!$message) {
                 $message = ':field size must be equal to :size';
             }
             $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'Size'));
         }
         return true;
     }
     //是否为字符串
     if (is_string($value)) {
         $strLen = function_exists('mb_strlen') ? mb_strlen($value) : strlen($value);
         if ($strLen != $size) {
             $label = $this->getOption("label");
             if (!$label) {
                 $label = $validation->getLabel($field);
             }
             $message = $this->getOption("message");
             $replacePairs = [':field' => $label, ':size' => $size];
             if (!$message) {
                 $message = ':field string length must be equal to :size';
             }
             $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'Size'));
         }
     }
     return true;
 }
Example #6
0
 /**
  * 校验是否在大于等于某个日期
  *
  * @param Validation $validation
  * @param string     $field
  * @return bool
  */
 public function validate(Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     if (!$value && $this->getOption('allowEmpty')) {
         return true;
     }
     //判断是否为日期格式数据
     $after = $this->getOption('after');
     if (!$this->checkDate($value, $this->getOption('format')) || !$after || !$this->checkDate($after, $this->getOption('format'))) {
         if (!($label = $this->getOption("label"))) {
             $label = $validation->getLabel($field);
         }
         $after = $this->getOption("after");
         $message = $this->getOption("message");
         $replacePairs = [':field' => $label, ':after' => $after];
         if (!$message) {
             $message = ':field or :after is not a valid date format';
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'After'));
         return false;
     }
     //校验时间是否正确
     if (strtotime($value) < strtotime($after)) {
         if (!($label = $this->getOption("label"))) {
             $label = $validation->getLabel($field);
         }
         $after = $this->getOption("after");
         $message = $this->getOption("message");
         $replacePairs = [':field' => $label, ':after' => $after];
         if (!$message) {
             $message = 'Time :field must after :after';
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'After'));
     }
     return true;
 }
Example #7
0
 /**
  * Executes the namespaces validation
  *
  * @param Validation $validation
  * @param string     $field
  *
  * @return bool
  */
 public function validate(Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     if ($this->isSetOption('allowEmpty') && empty($value)) {
         return true;
     }
     $re = '#^(?:(?:\\\\)?[a-z](?:[a-z0-9_]+)?)+(?:\\\\(?:[a-z](?:[a-z0-9_]+)?)+)*$#i';
     if (false === (bool) preg_match($re, $value)) {
         $label = $this->getOption('label') ?: $validation->getLabel($field);
         $message = $this->getOption('message') ?: 'Invalid namespace syntax!';
         $replacePairs = array(':field' => $label);
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'Namespaces'));
         return false;
     }
     return true;
 }
Example #8
0
 /**
  * 校验字符串最小长度
  *
  * @param Validation $validation
  * @param string     $field
  * @return bool
  */
 public function validate(Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     $strLen = function_exists('mb_strlen') ? mb_strlen($value) : strlen($value);
     $min = (int) $this->getOption('min');
     if ($strLen < $min) {
         $label = $this->getOption("label");
         if (!$label) {
             $label = $validation->getLabel($field);
         }
         $message = $this->getOption("message");
         $replacePairs = [':field' => $label, ':min' => $min];
         if (!$message) {
             $message = ':field string length must not be lesser than :min';
         }
         $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'Min'));
     }
     return true;
 }
Example #9
0
 /**
  * 验证字段类型是否为数组
  *
  * @param Validation $validation
  * @param     string $field
  * @return bool
  */
 public function validate(Validation $validation, $field)
 {
     $value = $validation->getValue($field);
     if (is_array($value)) {
         return true;
     }
     if (!($label = $this->getOption('label'))) {
         $label = $validation->getLabel($field);
     }
     if (!($message = $this->getOption('message'))) {
         $message = ':field must be an array';
     }
     $replacePairs = [':field' => $label];
     $code = $this->getOption('code');
     if (is_array($code)) {
         $code = $code[$field];
     }
     $validation->appendMessage(new Message(strtr($message, $replacePairs), $field, 'Arr', $code));
     return false;
 }
Example #10
0
 /**
  * @param \Phalcon\Validation $validation
  * @param string              $field
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     if (!is_string($field)) {
         throw new \Phalcon\Validation\Exception("Field name must be a string");
     }
     $label = $this->getOption("label");
     if (empty($label)) {
         $label = $validation->getLabel($field);
     }
     $value = $validation->getValue($field);
     if ($this->isSetOption("allowEmpty") && empty($value)) {
         return true;
     }
     if (!preg_match("/^\\{?[A-Z0-9]{8}-[A-Z0-9]{4}-[1-5][A-Z0-9]{3}-[A-Z0-9]{4}-[A-Z0-9]{12}\\}?\$/i", $value)) {
         $message = $this->getOption("message");
         if (empty($message)) {
             $message = "Field :field must be a valid UUID";
         }
         $replacePairs = [":field" => $label];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Uuid"));
         return false;
     }
     $allowedVersions = $this->getOption("allowedVersions");
     if (empty($allowedVersions)) {
         $allowedVersions = [1, 2, 3, 4, 5];
     }
     if (!in_array(substr($value, 14, 1), $allowedVersions)) {
         $message = $this->getOption("messageVersion");
         if (empty($message)) {
             $message = "Field :field must be one of the following UUID versions: :versions";
         }
         $replacePairs = [":field" => $label, ":versions" => implode(", ", $allowedVersions)];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Uuid"));
         return false;
     }
     return true;
 }
 /**
  * @param \Phalcon\Validation $validation
  * @param string              $field
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     if (!is_string($field)) {
         throw new \Phalcon\Validation\Exception("Field name must be a string");
     }
     $label = $this->getOption("label");
     if (empty($label)) {
         $label = $validation->getLabel($field);
     }
     $value = $validation->getValue($field);
     if ($this->isSetOption("allowEmpty") && empty($value)) {
         return true;
     }
     if (!preg_match("/^[A-Z]{3}\$/i", $value)) {
         $message = $this->getOption("message");
         if (empty($message)) {
             $message = "Field :field must be a valid ISO 4217 currency code";
         }
         $replacePairs = [":field" => $label];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Iso4217CurrencyCode"));
         return false;
     }
     return true;
 }
 /**
  * @param \Phalcon\Validation $validation
  * @param string              $field
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     if (!is_string($field)) {
         throw new \Phalcon\Validation\Exception("Field name must be a string");
     }
     $label = $this->getOption("label");
     if (empty($label)) {
         $label = $validation->getLabel($field);
     }
     $value = $validation->getValue($field);
     if ($this->isSetOption("allowEmpty") && empty($value)) {
         return true;
     }
     if (!in_array($value, \DateTimeZone::listIdentifiers())) {
         $message = $this->getOption("message");
         if (empty($message)) {
             $message = "Field :field is not a valid timezone";
         }
         $replacePairs = [":field" => $label];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Timezone"));
         return false;
     }
     return true;
 }
Example #13
0
 /**
  * @param \Phalcon\Validation $validation
  * @param string              $field
  *
  * @return boolean
  *
  * @throws \Phalcon\Validation\Exception
  */
 public function validate(\Phalcon\Validation $validation, $field)
 {
     if (!is_string($field)) {
         throw new \Phalcon\Validation\Exception("Field name must be a string");
     }
     $label = $this->getOption("label");
     if (empty($label)) {
         $label = $validation->getLabel($field);
     }
     $value = $validation->getValue($field);
     if ($this->isSetOption("allowEmpty") && empty($value)) {
         return true;
     }
     if (!preg_match('/^[a-zA-Z0-9\\-]+$/i', $value)) {
         $message = $this->getOption("message");
         if (empty($message)) {
             $message = "Field :field is not in a valid slug format";
         }
         $replacePairs = [":field" => $label];
         $validation->appendMessage(new \Phalcon\Validation\Message(strtr($message, $replacePairs), $field, "Slug"));
         return false;
     }
     return true;
 }