Valid URL Format Checking in CodeIgniter 2.x Using custom/extended Form Valdiation Library
CodeIgniter lacks with URL validation. The only one that it provides is called prep_url which does nothing more then prepend "http://" to URLs if missing.
Create a file in the application/library directory called MY_Form_validation.php. Make the class name MY_Form_validation as well. Be sure that it extends CI_Form_validation, and that it calls the parent constructor. This will allow you to extend the built-in validation library and add additional validators to it.
Then in your code, you can simply add additional validators like:
The two new validators are valid_url_format which checks for a properly formatted URL and url_exists which checks for a valid server. You should prefix the two with prep_url so that if they don’t enter a scheme the other validators won’t fail.
Create a file in the application/library directory called MY_Form_validation.php. Make the class name MY_Form_validation as well. Be sure that it extends CI_Form_validation, and that it calls the parent constructor. This will allow you to extend the built-in validation library and add additional validators to it.
Then in your code, you can simply add additional validators like:
$rules['URL'] = 'required|prep_url|valid_url_format|url_exists';
The two new validators are valid_url_format which checks for a properly formatted URL and url_exists which checks for a valid server. You should prefix the two with prep_url so that if they don’t enter a scheme the other validators won’t fail.
if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Additional validations for URL format.
*
* @package Module Creator
* @subpackage ThirdParty
* @category Libraries
* @author Anup Shakya
* @created 01/10/2013
*/
class MY_Form_validation extends CI_Form_validation{
public function __construct()
{
parent::__construct();
}
/**
* Validate URL format
*
* @access public
* @param string
* @return string
*/
function valid_url_format($str){
$pattern = "|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i";
if (!preg_match($pattern, $str)){
$this->set_message('valid_url_format', 'The URL you entered is not correctly formatted.');
return FALSE;
}
return TRUE;
}
// --------------------------------------------------------------------
/**
* Validates that a URL is accessible. Also takes ports into consideration.
* Note: If you see "php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known"
* then you are having DNS resolution issues and need to fix Apache
*
* @access public
* @param string
* @return string
*/
function url_exists($url){
$url_data = parse_url($url); // scheme, host, port, path, query
if(!fsockopen($url_data['host'], isset($url_data['port']) ? $url_data['port'] : 80)){
$this->set_message('url_exists', 'The URL you entered is not accessible.');
return FALSE;
}
return TRUE;
}
}
// END Form Validation Class
/* End of file My_Form_validation.php */
/* Location: ./application/libraries/My_Form_validation.php */
In this way, you can extend the Form_validation library without touching core library.
Ref: http://brianistech.wordpress.com/2010/11/19/url-validation-in-codeigniter/

looks nice. this is what i was expected thanks....
ReplyDeleteExcelent!!!
ReplyDelete