2015-02-10 15 views
5

Come posso convalidare il campo modulo che ha l'URL come valore di input.regole di convalida del modulo di codifica codice URL

Ho provato con le seguenti regole. Ma consente il campo se l'utente inserisce una stringa.

Visualizza File:

<?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' 
) 

I utente prep_url ma aggiunge solo http: // in campo ma non ha convalidato il campo per l'URL .

mio campo dovrebbe accettare solo i seguenti formati:

http://www.sample.com

www.sample.com

http://sample.com

Come posso fare questo?

risposta

4

È possibile aggiungere questo al file Form_validation.php per controllare la sintassi dell'URL o anche controllare se esiste l'URL effettivo.

/** 
* 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

che può lavorare troppo: p – KyleMassacre

+0

ho capito .. ma comunque bello ottenuto rispondere !!! – TomPHP

+1

Cool :) Come hai lavorato? Solo curioso. –

3

partire dal Codeigniter 3, c'è una nuova regola di convalida modulo per valid_url che potresti usare. Questo controllerà la sintassi corretta, ma non controllerà se puoi effettivamente premere l'url. Dovresti utilizzare la funzione personalizzata real_url in this answer.

La documentazione per la nuova regola di convalida viene trovata here.

1

per correggere/aggiungere alla risposta di bit a bit creativo, restituisce una risorsa, non VERO/FALSO

Si dovrebbe anche cambiare la vostra/librerie di file application/MY_Form_validation.php. Non sovrascrivere la libreria di accodamento codice.

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); 
} 
Problemi correlati