首页 > 解决方案 > 空格的codeigniter表单验证正则表达式不起作用

问题描述

我有一个只能由字母数字、下划线、破折号和圆点填充的表单输入框。奇怪的是,我可以成功地检查输入是否符合 regex101 中的规则/^[A-Za-z0-9._-]+$/,但是当我在我的 PHP 代码上应用相同的模式时,表单验证不会space在结尾出现错误时触发错误。下面是我的代码:

这是html:

<form action="" id="form1">
  <input type="text" name="username" id="username" value="<?php $this->input->post('username'); ?>">
  <button type="button" id="btnSubmit">Submit</button>
</form>

表单使用 jquery (v3.3.1) ajax 发布,如下所示:

var myData = $('#form1').serializeArray();

$.ajax({
  url: '/home/validate_inputs',
  type: 'POST',
  data: myData,
  dataType: 'json',
  success: function(res) {
    console.log('res', res);
  },
  error: function(err) {
    console.log('error', responseText);
  }
});

这是 PHP (v7.4.7) 代码:

public function validate_inputs()
{
  $rules = [
    'field' => 'username',
    'label' => 'Username',
    'rules' => 'required|callback__check_characters_username'
  ];
  $this->form_validation->set_rules($rules);

  if ($this->input->server('REQUEST_METHOD') == 'POST' && $this->form_validation->run())
  {
    // do database process
  }

  if ($this->input->is_ajax_request())
  {
    $response = [
      'postdata' => $this->input->post(),
      'message' => validation_errors() ? : 'process completed successfully',
    ];
    echo json_encode($response);
  }

}

public function _check_characters_username($val)
{
  if ( ! preg_match("/^[A-Za-z0-9._-]+$/", $val))
  {
    $this->form_validation->set_message('_check_characters_username', 'Forbidden characters!!');
    return false;
  }

  return true;
}

标签: jqueryregexajaxcodeignitervalidation

解决方案


推荐阅读