codeigniter 表单验证规则 url

Posted

技术标签:

【中文标题】codeigniter 表单验证规则 url【英文标题】:codeigniter form validation rules 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

我该怎么做?

【问题讨论】:

【参考方案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);
    

【讨论】:

以上是关于codeigniter 表单验证规则 url的主要内容,如果未能解决你的问题,请参考以下文章

匹配的 Codeigniter 表单验证规则(密码)

is_unique 用于 codeigniter 表单验证

在 CodeIgniter 中验证表单下拉列表

CodeIgniter 表单验证,无法获取验证错误

Codeigniter 4 - 表单验证

Codeigniter 表单验证 - 成功后如何取消设置表单值?