/** * @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; }
/** * 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; }
/** * {@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; }
/** * {@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; }
/** * 校验大小 * * @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; }
/** * 校验是否在大于等于某个日期 * * @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; }
/** * 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; }
/** * 校验字符串最小长度 * * @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; }
/** * 验证字段类型是否为数组 * * @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; }
/** * @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; }
/** * @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; }