2011-12-13 11 views
7

Tôi gặp lỗi khi cố gắng đặt thông báo xác thực tùy chỉnh trong CodeIgniter cho các ràng buộc xác thực min_lengthmax_length.xác thực max_length, min_length trong mã vạch

Đây là những quy tắc xác nhận của tôi:

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

Đây là những thông điệp xác nhận tùy chỉnh của tôi:

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

Trong ví dụ của tôi, chúng tôi có hai lĩnh vực, nhưng tôi có nhiều lĩnh vực với tối thiểu khác nhau và thời gian tối đa giá trị. Tất cả chúng đều có một xác nhận ràng buộc cụ thể. Tin nhắn này không hoạt động. Thông báo xuất hiện theo mặc định. Cảm ơn bạn đã giúp đỡ.

Trả lời

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

thiếu khung bế mạc - ):

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


Cập nhật
Có lẽ sử dụng một hàm callback sẽ tốt hơn? Ví dụ:

$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

Trong mã nguồn của tôi là ok.Tôi quên để đặt các bracked đóng cửa khi tôi đã đăng bài của tôi. Nghi ngờ của tôi tiếp tục. Cảm ơn bạn đã chỉnh sửa. – cabita

+0

@cabita - Tôi đã cập nhật câu trả lời của mình. – stealthyninja

+0

Xin cảm ơn, tôi sẽ xem xét câu trả lời của bạn. Cảm ơn. – cabita

2

Khi sử dụng set_message, bạn không thể chỉ định độ dài (cả phút và tối đa) theo cách bạn đã thực hiện. Bạn có thể thiết một thông điệp chung cho min_lengthmax_length như:

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

Nếu không, bạn sẽ phải sử dụng CodeIgniter 's tính năng gọi lại và thiết lập một chức năng xác nhận tùy chỉnh mà sẽ giống như thế này (đối với chiều dài tối thiểu !!).

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

Bạn sẽ thiết lập quy tắc xác nhận của bạn như thế này:

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

Thông báo các callback_ tiền tố trên quy tắc custom_min_length. Điều này thay thế và được sử dụng thay cho hàm CI min_length thông thường.

Hy vọng rằng sẽ giúp ... Tôi sẽ để lại cho bạn tìm ra cách để làm custom_max_length chức năng :)

+0

Cảm ơn sự giúp đỡ của bạn, tôi sẽ xem xét câu trả lời của bạn. – cabita

12

Đó là một đơn giản chỉ cần thêm %s khác để có được giá trị chiều dài ..

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

Bạn sẽ chỉ cung cấp kích thước nếu bạn sử dụng %slần thứ hai. Lần đầu tiên nó sẽ cho tên trường mà bạn chỉ định ..

0

Nếu bạn muốn hiển thị thông báo xác nhận của riêng mình, làm một cái gì đó như thế:

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

mà không có chi nhánh: [num]

Greetings