我找到了网站验证。但后来我需要进行一些更改并添加特殊的社交网络(facebook,twitter,plus.google)验证。
这就是我所拥有的:
function isValidUrl($url,$media) {
$url= strtolower($url);
// Scheme
$urlregex = "^(https?)\:\/\/";
// User and Pass (optional)
if (!isset($media)) {
$urlregex .= "([A-Za-z0-9+!*(),;?&=\$_.-]+(\:[A-Za-z0-9+!*(),;?&=\$_.-]+)?@)?";
}
// Hostname
if (isset($media)) {
if ($media == 'fb') { $urlregex .= "([facebook]+\.)"; }
else if ($media == 'gplus') { $urlregex .= "([plus\.google]+\.)"; }
else if ($media == 'twitter') { $urlregex .= "([twitter]+\.)"; }
} else {
$urlregex .= "([A-Za-z0-9+\$_-]+\.)";
}
$urlregex .= "*(?:[A-Za-z]{2}|com";
if (!isset($media)) {
$urlregex .= "|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum|cat|coop|int|pro|tel|travel|xxx";
}
// Hostname End
$urlregex .= ")";
// Port/Path (optional)
$urlregex .= "(\:[0-9]{2,5})?";
$urlregex .= "(\/([A-Za-z0-9+\$_-]\.?)+)*\/?";
// Query
$urlregex .= "(\?[A-Za-z+&\$_.-][A-Za-z0-9;:@/&%=+\$_.-]*)?";
// Anchor
$urlregex .= "(#[A-Za-z_.-][A-Za-z0-9+\$_.-]*)?\$^";
return preg_match($urlregex,$url);
}
简单的网站验证正常,但社交网络不是我想要的方式。
例如,http://facebook.com
有效,但我需要有效http://facebook.com/something
这样的网址,并使第一个变为无效(http://twitter.com
和http://plus.google.com
相同)。 http://plus.google.com
验证不起作用,它允许http://plusgoogle.com
和其他融合。
我想更改/添加:
1)如上所述修复社交网络(facebook,gplus,twitter)验证;
2)还要允许没有协议http://
或带有www.
两者的网址,以便http://stackoverflow.com
{{{}} {{}} { {1}}和http://www.stackoverflow.com
。
编辑:为了清楚起见,我将此功能称为以下方式。
stackoverflow.com
答案 0 :(得分:2)
我将取消超级复杂的regexen并使用已经内置的函数:
define('VALIDATE_URL_GENERAL', 1);
define('VALIDATE_URL_FACEBOOK', 2);
...
function validateURL($url, $type = VALIDATE_URL_GENERAL) {
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
$parts = parse_url($url);
switch ($type) {
case VALIDATE_URL_GENERAL :
return true;
case VALIDATE_URL_FACEBOOK :
return $parts['host'] == 'facebook.com';
...
}
}
这并非详尽无遗,但我希望你明白这一点。有关详细信息,请参阅parse_url
。
答案 1 :(得分:1)
您是否考虑过使用
“ping”网址file_get_contents(yourUrl).
自定义404会刺伤你。