【问题标题】:codeigniter form validation rules urlcodeigniter 表单验证规则 url
【发布时间】:2015-04-10 00:51:39
【问题描述】:

如何验证以 URL 作为输入值的表单字段。

我尝试了以下规则。但如果用户输入一个字符串,它允许该字段。

查看文件:

<?php $data = array(
                    'name'        => 'com_url',
                    'id'          => 'com_url',
                    'value'       => set_value('com_url'),
                    'placeholder' => $this->lang->line('register_com_url'),
                    'class'       => 'form-control',
                    'maxlength'  => 100

                  );
                  echo form_input($data);
            ?>

配置:

array(
    'field'   => 'com_url',
    'label'   => 'Com URL',
    'rules'   => 'trim|required|prep_url'
)

我使用了 prep_url,但它只在字段中添加了 http://,但没有验证 URL 字段。

我的字段应该只接受以下格式:

http://www.sample.com

www.sample.com

http://sample.com

我该怎么做?

【问题讨论】:

    标签: php validation codeigniter


    【解决方案1】:

    您可以将其添加到您的 Form_validation.php 文件中以检查 url 语法,甚至检查实际 URL 是否存在。

    /**
     * Validate URL
     *
     * @access    public
     * @param    string
     * @return    string
     */
    function valid_url($url)
    {
        $pattern = "/^((ht|f)tp(s?)\:\/\/|~/|/)?([w]{2}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?/";
        if (!preg_match($pattern, $url))
        {
            return FALSE;
        }
    
        return TRUE;
    }
    
    // --------------------------------------------------------------------
    
    /**
     * Real URL
     *
     * @access    public
     * @param    string
     * @return    string
     */
    function real_url($url)
    {
        return @fsockopen("$url", 80, $errno, $errstr, 30);
    } 
    

    【讨论】:

    • @BitwiseCreative 我使用了回调和控制器中的函数..和你一样..
    【解决方案2】:

    从 Codeigniter 3 开始,您可以使用 valid_url 的新表单验证规则。这将检查正确的语法,但不检查您是否真的可以点击 url。您必须在this answer 中使用自定义real_url 函数。

    新验证规则的文档位于here

    【讨论】:

      【解决方案3】:

      在您的form_validation.php 文件中添加以下简单代码:

       function valid_url($url){
             if (filter_var($url, FILTER_VALIDATE_URL))
                return TRUE;
             else 
                return FALSE;    
          }
      

      【讨论】:

        【解决方案4】:

        我不相信 CI 有用于 url 的验证方法。您可以做的是查找此资源: http://www.codeigniter.com/user_guide/libraries/form_validation.html 并使用诸如 filter_var、filter_input 和使用 url 验证创建您自己的: http://php.net/manual/en/filter.filters.validate.php

        【讨论】:

          【解决方案5】:

          要更正/添加到按位广告素材的答案,它会返回一个资源,而不是 TRUE/FALSE

          您还应该更改您的 application/libraries/MY_Form_validation.php 文件。 不覆盖代码点火器库。

          function real_url($url)
          {
              $port = 80;
              $url_to_test = $url;
              if (substr($url_to_test,0,7) == 'http://')
              {
                  $url_to_test = substr($url_to_test,7);  
              }
              else if (substr($url_to_test,0,8) == 'https://')
              {
                  $url_to_test = substr($url_to_test,8);
                  $port = 443;
              }
              $r= @fsockopen($url_to_test, $port, $errno, $errstr, 5);
              return is_resource($r);
          } 
          

          【讨论】:

            【解决方案6】:

            您可以使用以下代码或通过更新验证库访问:https://brianistech.wordpress.com/2010/11/19/url-validation-in-codeigniter/

            $pattern = "|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i";
            
            if (!preg_match($pattern, $_REQUEST['test'])){
                echo 'The URL you entered is not correctly formatted.';        
             }
            

            【讨论】:

              【解决方案7】:

              在 codeigniter 中你可以使用 valid_url 回调来检查输入的 URL 是否有效

              例如:可以使用此代码验证名称为“url”且标签为“Remote Url”的字段

              $this->form_validation->set_rules('url', 'Remote Url', 'callback_valid_url');
              

              并添加一个新功能

               public function valid_url($str) {
                      return (filter_var($str, FILTER_VALIDATE_URL) !== FALSE);
                  }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-07-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-11-21
                相关资源
                最近更新 更多