2011-12-13 9 views
7

Aparece un error al intentar establecer mensajes de validación personalizados en CodeIgniter para las restricciones de validación min_length y max_length.validación max_length, min_length en codeigniter

Estos son mis reglas de validación:

$this->form_validation->set_rules('username', 'Username', 'required|xss_clean|min_length[6]|max_length[10]'); 
$this->form_validation->set_rules('password', 'Password', 'required|min_length[8]|max_length[20]'; 

Estos son mi mensaje de validación personalizada:

$this->form_validation->set_message('min_length[3]', '%s: the minimum of characters is three'); 
$this->form_validation->set_message('max_length[20]', '%s:the maximum of characters is 20'); 

En mi ejemplo tenemos dos campos, pero tengo muchos campos con diferente longitud mínima y máxima valores. Todos ellos tienen validaciones de restricciones específicas. Este mensaje no funciona. El mensaje aparece por defecto. Gracias por tu ayuda.

Respuesta

8
$this->form_validation->set_rules('password', 'Password', 'required|min_length[8]|max_length[20]'; 

falta un paréntesis de cierre - ):

$this->form_validation->set_rules('password', 'Password', 'required|min_length[8]|max_length[20]'); 


actualización
tal vez utilizando una función callback sería mejor? Ej .:

$this->form_validation->set_rules('username', 'Username', 'required|xss_clean|callback__check_length[6,10]'); 


/** 
* Callback function. Checks if the length of the user's input 
* conforms to minimum and maximum character length requirements 
* 
* @param string 
* @param int 
* @param int 
* @return bool 
*/ 
function _check_length($input, $min, $max) 
{ 
    $length = strlen($input); 

    if ($length <= $max && $length >= $min) 
    { 
     return TRUE; 
    } 
    elseif ($length < $min) 
    { 
     $this->form_validation->set_message('_check_length', 'Minimum number of characters is ' . $min); 
     return FALSE;   
    } 
    elseif ($length > $max) 
    { 
     $this->form_validation->set_message('_check_length', 'Maximum number of characters is ' . $max); 
     return FALSE;   
    } 
} 
+0

En mi código fuente está bien.Olvidé poner el cierre cerrado cuando hice mi publicación. Mi duda continúa Gracias por tu corrección. – cabita

+0

@cabita - He actualizado mi respuesta. – stealthyninja

+0

Gracias, revisaré su respuesta. Gracias. – cabita

2

Al utilizar set_message, no se puede especificar las longitudes (tanto mínimo y máximo) de la manera que lo ha hecho. Se puede establecer ya sea un mensaje general para min_length y max_length como:

$this->form_validation->set_message('min_length', 'The value you have entered for %s is too short'); 
$this->form_validation->set_message('max_length', 'The value you have entered for %s is too long'); 

De lo contrario, tendrá que utilizar CodeIgniter 'función de devolución de llamada s y configurar una función de validación personalizada, que sería algo como esto (por la longitud mínima !!).

public function custom_min_length($str, $val) { 
    if (preg_match("/[^0-9]/", $val)) { 
     return FALSE; 
    } 
    if (function_exists('mb_strlen')) { 
     if(mb_strlen($str) < $val) { 
      $this->form_validation->set_message('custom_min_length', '%s: The Minimum Number Of Characters Is ' . $val); 
      return FALSE; 
     } else { 
      return TRUE; 
     } 
    } 
    if(strlen($str) < $val) { 
     $this->form_validation->set_message('custom_min_length', '%s: The Minimum Number Of Characters Is ' . $val); 
     return FALSE; 
    } else { 
     return TRUE; 
    } 
} 

Se podría establecer su regla de validación de la siguiente manera:

$this->form_validation->set_rules('username', 'Username', 'callback_custom_min_length[6]|required|xss_clean'); 

Aviso callback_ el prefijo de la regla custom_min_length. Esto reemplaza y se usa en lugar de la función habitual min_length CI.

Espero que ayude ... voy a dejar a averiguar cómo hacer la función custom_max_length :)

+0

Gracias por su ayuda, revisaré su respuesta. – cabita

12

Es una sencilla sólo tiene que añadir otra %s para obtener el valor de la longitud ..

$this->form_validation->set_message('min_length', '%s: the minimum of characters is %s'); 

Solo dará el tamaño si usa %spor segunda vez. primera vez se le dará el nombre del campo que ha especificado ..

0

Si desea mostrar su propio mensaje de validación, hacer algo así:

$this->form_validation->set_message('min_length','YOUR MESSAGE'); 

sin las ramas: [num]

saludos

Cuestiones relacionadas