проверка формы кодового указателя - PullRequest
2 голосов
/ 25 мая 2011

У меня есть следующий php-код, использующий структуру codeigniter

$this->form_validation->set_rules('money', 'Money', 'integer|required|xss_clean');

Он проверяет поле денег как целое число.Как я могу проверить поле как целое ИЛИ десятичное число.

Я предположил, что это будет что-то простое, как

$this->form_validation->set_rules('money', 'Money', '(decimal||integer)|required|xss_clean');

, но это не работает!

Ответы [ 7 ]

7 голосов
/ 26 мая 2011

Из документов проверки формы CI :

Примечание: Вы также можете использовать любые встроенные функции PHP, которые разрешают один параметр.

is_numeric() может работать для вас, но он принимает некоторые форматы, которые очень отличаются от денег.

is_float() будет работать, за исключением того, что он потерпит неудачу на строках и целых числах.

Обе эти функции также слишком мягки в проверке числового целого или десятичного числа, которое вы обычно принимаете в качестве денежного значения.Встроенная функция CI decimal() требует десятичной точки и допускает символы + и -.

Да, я знаю - не полезно, но, надеюсь, заставит задуматься.Синтаксис, который вы хотели бы использовать, просто не будет работать.Я бы предложил создать ваше собственное правило проверки формы для проверки денег путем расширения библиотеки Form_validation.

Создать файл /application/libraries/MY_Form_validation.php

Примерно так:

class MY_Form_validation extends CI_Form_validation {

    function is_money($input = '')
    {
            // Validate input here and return TRUE or FALSE
    }

}

Сначала я написал неверный пример, затем попытался написать что-то, что сработало бы, и понял, что это ваше дело.Вы можете или не можете разрешить символы, такие как $, , -, +, или десятичные дроби за пределами двух знаков, или десятичную с одним местом, или запятые в цифре для разделения тысяч ..Используйте любой метод проверки, который вам подходит.

Вот хороший пример проверки денежного формата: Как проверить, является ли введенное значение валютой

4 голосов
/ 19 октября 2012

Это то, что я использую в классе MY_Form_validation.

/**
 * Money, decimal or integer
 *
 * @access  public
 * @param   string
 * @return  bool
 */
public function money($str)
{
    //First check if decimal
    if(!parent::decimal($str))
    {
        //Now check if integer
        return (bool) parent::integer($str);
    }

    return TRUE;
}

И, конечно, в вашем /system/language/english/form_validation_lang.php вы должны добавить соответствующее сообщение для ошибки проверки.

3 голосов
/ 05 октября 2012

использовать числовое значение напрямую .... числовое значение | требуется

2 голосов
/ 26 мая 2011

Вы можете попробовать пользовательский обратный вызов:

$this->form_validation->set_rules('money', 'Money', 'callback_money_type');


function money ($param) {

 //conditional statements here

if(is_int($param) || is_float($param){
 $this->form_validation->set_message('money_type', 'Your message here');
  return false;

} else {

  return true;
}

}
0 голосов
/ 22 августа 2017

Вы можете использовать как ниже

$ this-> form_validation-> set_rules ('вознаграждение', 'вознаграждение', 'callback_validate_money');

public function validate_money ($input) {
    if(preg_match('/^[0-9]*\.?[0-9]+$/', $input)){
        return true;
    } else {
         $this->form_validation->set_message('validate_money','Please enter valid reward!');
        return false;
    }
}
0 голосов
/ 07 января 2017

Вместо использования decimal||integer теперь мы можем использовать numeric для проверки числовых символов.

0 голосов
/ 11 августа 2011

ctype_digit может быть полезным, это встроенная функция PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...