2015-02-10 4 views
5

Как я могу проверить поле формы, которое имеет URL как входное значение.codeigniter form validation rules 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); 
      ?> 

Config:

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

Как я могу это сделать?

ответ

4

Вы можете добавить это в свой файл 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); 
} 
+1

, который может работать также: р – KyleMassacre

+0

я понял это .. но все равно приятно получил ответ !!! – TomPHP

+1

Прохладный :) Как вы это сделали? Просто любопытно. –

2

Я не считаю, что у 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

3

По Codeigniter 3, есть новое правило проверки формы для valid_url что вы можете использовать. Это проверит правильный синтаксис, но не проверяет, действительно ли вы можете набрать URL. Вы должны использовать функцию real_url в this answer.

Документация для нового правила проверки найдена here.

1

исправить/добавить побитовому ответ творческий, он возвращает ресурс, а не TRUE/FALSE

Вы должны также изменить/библиотеки/файл 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); 
}