douou9786
douou9786
2012-05-08 16:19

如何检查文本是否包含特定域名?

已采纳

I currently have this but it's not flawless:

$testcases = array(
array("I love mywebsite.com", true),
array("mywebsite.com/ is what I like", true),
array("www.mywebsite.com is my website", true),
array("Check out www.mywebsite.com/", true),
array("... http://mywebsite.com ...", true),
array("... http://mywebsite.com/ ...", true),
array("... http://www.mywebsite.com ...", true),
array("... http://www.mywebsite.com/ ...", true),
array("I like commas and periods. Just like www.mywebsite.com, they do it too!", true),
array("thisismywebsite.com is a lot better", false),
array("The URL fake.mywebsite.com is unknown to their server", false),
array("Check out http://redirect.mywebsite.com/www.ultraspammer.com", false)
);

function contains_link($text) {
return preg_match("/(https?:\/\/(?:www\.)?|(?:www\.))mywebsite\.com/", $text) > 0;
}

foreach ($testcases as $case) {
echo $case[0] . "=".(contains_link($case[0]) ? "true" : "false") . " and it should be " . ($case[1] ? "true" : "false") . "<br />";
}

Output:

I love mywebsite.com=false and it should be true
mywebsite.com/ is what I like=false and it should be true
www.mywebsite.com is my website=true and it should be true
Check out www.mywebsite.com/=true and it should be true
... http://mywebsite.com ...=true and it should be true
... http://mywebsite.com/ ...=true and it should be true
... http://www.mywebsite.com ...=true and it should be true
... http://www.mywebsite.com/ ...=true and it should be true
I like commas and periods. Just like www.mywebsite.com, they do it too!=true and it should be true
thisismywebsite.com is a lot better=false and it should be false
The URL fake.mywebsite.com is unknown to their server=false and it should be false
Check out http://redirect.mywebsite.com/www.ultraspammer.com=false and it should be false
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • doujiang1001 doujiang1001 9年前

    An alternative to regex: parse_url()

    $url = parse_url($text);
    if($url['host'] == 'www.mywebsite.com' || $url['host'] == 'mywebsite.com')
    

    UPDATE:

    Assuming that $text can have a lot of domains,use strstr() instead.

    if(strstr($text,"mywebsite.com") !== FALSE)
    

    UPDATE 2:

    function contains_link($text) {
            return preg_match("/(^(https?:\/\/(?:www\.)?|(?:www\.))?|\s(https?:\/\/(?:www\.)?|(?:www\.))?)mywebsite\.com/", $text);
    }
    

    and:

      contains_link("AAAAAAA http://mywebsite.com"); //1
      contains_link("foo BAaa http://www.mywebsite.com"); //1
      contains_link("abc.com www.mywebsite.com"); // 1
    
    点赞 评论 复制链接分享
  • douzouchang7448 douzouchang7448 9年前

    if you only search for the text:

    strpos($text, "mywebsite.com") !== FALSE
    

    if you want to seach for an exact "word" (start):

    preg_match("/(^|\s)(https?:\/\/)?(www\.)?mywebsite\.com/", $text);
    

    or (start & end):

    preg_match("/(^|\s)(https?:\/\/)?(www\.)?mywebsite\.com\/?(\s|[,.]|$)/", $text);
    
    点赞 评论 复制链接分享
  • dongyihao9887 dongyihao9887 9年前

    I think what you're looking for is this:

    ^(https?://)?(www\.)?mywebsite\.com/?

    See it here in action: http://regexr.com?30t6m


    Here it is in PHP:

    function contains_link($text) {
        return preg_match("~^(https?://)?(www\.)?mywebsite\.com/?~", $text);
    }
    

    P.S. If you want to be sure that there's nothing after it, you should append a $ to the end.

    点赞 评论 复制链接分享

相关推荐