2011-12-13 11 views
7

Viene visualizzato un messaggio di errore durante il tentativo di impostare messaggi di convalida personalizzati in CodeIgniter per i vincoli di convalida min_length e max_length.validation max_length, min_length in codeigniter

Queste sono le mie regole di validazione:

$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]'; 

Questi sono il mio messaggio di convalida personalizzato:

$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'); 

Nel mio esempio abbiamo due campi, ma ho molti campi con diversa lunghezza minima e massima valori. Hanno tutti una convalida di vincoli specifici. Questo messaggio non funziona. Il messaggio appare per impostazione predefinita. Grazie per l'aiuto.

risposta

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

manca una parentesi di chiusura - ):

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


Aggiornamento
magari utilizzando una funzione callback sarebbe meglio? Es .:

$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

Nel mio codice sorgente va bene.Ho dimenticato di mettere le parentesi di chiusura quando ho fatto il mio post. Il mio dubbio continua. Grazie per la correzione. – cabita

+0

@cabita - Ho aggiornato la mia risposta. – stealthyninja

+0

Grazie, esaminerò la tua risposta. Grazie. – cabita

2

Quando si utilizza set_message, non è possibile specificare le lunghezze (sia min e max) il modo in cui avete fatto. O si può impostare un messaggio generale per min_length e max_length come:

$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'); 

In caso contrario, si dovrà utilizzare CodeIgniter 's funzione di richiamata e impostare una funzione di validazione personalizzata che sarebbe simile a questa (per la lunghezza minima !!).

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; 
    } 
} 

Si potrebbe impostare la regola di convalida in questo modo:

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

Avviso il callback_ prefisso sulla regola custom_min_length. Sostituisce e viene utilizzato al posto della normale funzione CI min_length.

Speranza che aiuta ... lascio a capire come fare la funzione custom_max_length :)

+0

Grazie per il tuo aiuto, esaminerò la tua risposta. – cabita

12

E 'semplice basta aggiungere un altro %s per ottenere il valore della lunghezza ..

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

Le dimensioni verranno fornite solo se si utilizza %sseconda volta. prima volta che vi darà il nome del campo specificato ..

0

Se si vuole mostrare il proprio messaggio di convalida, fare qualcosa di simile:

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

senza i rami: [num]

saluti