我想将我的注册限制为使用@mywork.com 的电子邮件,我在 My_Form_validation 中进行了以下操作。
public function email_check($email)
{
$findme='mywork.com';
$pos = strpos($email,$findme);
if ($pos===FALSE)
{
$this->CI->form_validation->set_message('email_check', "The %s field does not have our email.");
return FALSE;
}
else
{
return TRUE;
}
}
我使用它如下。我对用户名和密码使用 CI 规则并且它有效,对于电子邮件它接受任何电子邮件地址。我感谢任何帮助。
function register_form($container)
{
....
....
/ Set Rules
$config = array(
...//for username
// for email
array(
'field'=>'email',
'label'=>$this->CI->lang->line('userlib_email'),
'rules'=>"trim|required|max_length[254]|valid_email|callback_email_check|callback_spare_email"
),
...// for password
);
$this->CI->form_validation->set_rules($config);
最佳答案
直接在 Controller 中创建回调的问题在于,现在可以通过调用 http://localhost/yourapp/yourcontroller/yourcallback
在 url 中访问它,这是不可取的。有一种更加模块化的方法可以将您的验证规则隐藏到配置文件中。我推荐:
你的 Controller :
<?php
class Your_Controller extends CI_Controller{
function submit_signup(){
$this->load->library('form_validation');
if(!$this->form_validation->run('submit_signup')){
//error
}
else{
$p = $this->input->post();
//insert $p into database....
}
}
}
application/config/form_validation.php
:
<?php
$config = array
(
//this array key matches what you passed into run()
'submit_signup' => array
(
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required|max_length[255]|valid_email|belongstowork'
)
/*
,
array(
...
)
*/
)
//you would add more run() routines here, for separate form submissions.
);
application/libraries/MY_Form_validation.php
:
<?php
class MY_Form_validation extends CI_Form_validation{
function __construct($config = array()){
parent::__construct($config);
}
function belongstowork($email){
$endsWith = "@mywork.com";
//see: http://stackoverflow.com/a/619725/568884
return substr_compare($endsWith, $email, -strlen($email), strlen($email)) === 0;
}
}
application/language/english/form_validation_lang.php
:
添加:$lang['belongstowork'] = "抱歉,电子邮件必须属于工作。";
关于php - 向 Codeigniter 表单验证添加自定义回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878863/