使用的preg_match发现和验证嵌入在HTML类型的链接

我实现了一个功能来验证埃杜域。 这是我在做它:

if( preg_match('/edu/', $matches[0])==FALSE ) return FALSE; return TRUE;

现在,我想这点跳过这些网址,以及一些文件,如.pdf和.DOC。

对于这一点,下面的代码应该有工作,但并不:

if( preg_match('/edu/', $matches[0])==FALSE || preg_match('/pdf/i', $matches[0])!=FALSE || preg_match('/doc/i', $matches[0]!=FALSE)) return FALSE; return TRUE;

凡我错了这方面的? 此外,我将如何在它有文件类型列表中的URL字符串来检查这样的方式实现的preg_match。 如果找到一个特定类型的文件,它应该返回假。 换句话说,我要提供各种文档类型为$模式的列表(数组也许)在URL中找到。

注:比赛[0]包含整个URL字符串。 例如:http://www.nust.edu.pk/Documents/pdf/NNBS_Form.pdf

该函数的代码:

public function validateEduDomain($url) { // get host name from URL preg_match('@^(?:http://)?([^/]+)@i', $url, $matches); $host = $matches[1]; // get last two segments of host name preg_match('/[^.]+\.[^.]+$/', $host, $matches); if( preg_match('/edu/', $matches[0])!=FALSE && (preg_match('/pdf/i', $matches[0])==FALSE || preg_match('/doc/i', $matches[0]==FALSE))) return TRUE; return FALSE; }

--------------解决方案-------------

我不知道为什么你在做一切都那么复杂,也注意到你有$$比赛[0]而不是$比赛[0]。 你想要的正则表达式为:

if( preg_match('/^https?:\/\/[A-Za-z]+[A-Za-z0-9\.-]+\.edu/i', $matches[0]) && !preg_match('/\.(pdf)|(doc)$/i', $matches[0]) ) {
// do something here...
}

你可以看到,如果一个文件的扩展名与类似匹配:

preg_match('/\.php$/i', $string);

另外,为什么您使用的是双美元符号为$第二和第三场比赛的用法[0]?

如果我理解正确的话,这样的事情可以帮助:http://ideone.com/XOEiU

function validate_path($url) {
$url_parts = parse_url($url);
$path_info = pathinfo($url_parts['path']);

return preg_match('/\\.edu(?:\\.|$)/', $url_parts['host']) && in_array($path_info['extension'], array('pdf', 'doc', 'docx'));
}

我不会用这个正则表达式:

function is_edu_domain($url)
{
$parsed = parse_url($url);
$parts = explode('.', $parsed['host']);
return in_array('edu', $parts, TRUE);
}

这与您在您的意见中指定的域。

对于文件扩展名我也有一个单独的功能,更易于维护:

function is_unwanted_file_extension($url)
{
$path = pathinfo($url);
$extension = strtolower($path['extension']);
$unwanted_extensions = explode(',', 'pdf,doc');
return in_array($extension, $unwanted_extensions, TRUE);
}

您可以将二者结合起来:

function is_url_from_edu_and_wanted($url)
{
return is_edu_domain($url) and !is_unwanted_file_extension($url);
}

更可读性和可维护性然后正则表达式,但请注意,我已经为这些事情进行了优化,而不是速度。

分类:php 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.644 (s). 10 q(s)