此URL验证无法正常运行

时间:2015-08-20 09:05:44

标签: php codeigniter validation

我有一个代码,我从另一个stackoverflow帖子中取出,

在这里,

 function validate_url($url)
 {
     $pattern = "/^((ht|f)tp(s?)\:\/\/|~/|/)?([w]{2}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?/";
     if (!preg_match($pattern, $url))
     {
         $this->form_validation->set_message('validate_url', 'The URL you entered is not correctly formatted.'); 
         return false;
     }

     return false;
 }

它无法正常工作。它允许URL没有(类似的东西).com或.in(点后面的任何东西)。

意思是,它应该允许URL正确   http://something.com或   http://www.something.in

但不是   http://something(没有.in或.com或任何其他)或    某事或   www.something

我对正则表达式知之甚少。请帮帮我..

4 个答案:

答案 0 :(得分:3)

看看这个网站:

https://mathiasbynens.be/demo/url-regex

它包含许多不同的URL验证正则表达式。

来自Diego Perini的人:

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

似乎比filter_var使用的更好。

答案 1 :(得分:0)

您可以使用filter_var filter_var('http://example.com', FILTER_VALIDATE_URL);来验证您的网址。 在这里,您可以找到所有可以使用的validation types类型。 如果您想要http(s),可以添加使用此功能。

filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)

答案 2 :(得分:0)

使用此

<?php
$url = "http://something";

if ((!filter_var($url, FILTER_VALIDATE_URL) === false) && @fopen($url,"r")) {
    echo("$url is a valid URL");
} else {
    echo("$url is not a valid URL");
}
?>

或者使用此

<?php
$url = 'http://example';

if(validateURL($url)){
       echo "Valid";
    }else{
        echo "invalid";
    }

function validateURL($URL) {
      $pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
      $pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";       
      if(preg_match($pattern_1, $URL) || preg_match($pattern_2, $URL)){
        return true;
      } else{
        return false;
      }
    }
?>

答案 3 :(得分:0)

您可以使用以下正则表达式

$url = 'http://something.com';

$regex = "((https?|ftp)\:\/\/)?"; // SCHEME
$regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass
$regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP
$regex .= "(\:[0-9]{2,5})?"; // Port
$regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path
$regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query
$regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor

if(preg_match("/^$regex$/", $url)) {
    echo "Matched";
} else {
    echo "Not Matched";
}