2012-05-08 2 views
-1

я в настоящее время это, но это не безупречна:Как проверить, содержит ли текст определенное доменное имя?

$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 />"; 
}

Выход:

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
+2

И ваш вопрос/проблема? – mellamokb

+0

Выглядит хорошо для меня –

+1

Проверьте это сообщение SO после того, как вы http://stackoverflow.com/questions/1755144/how-to-validate-domain-name-in-php – Rahul

ответ

9

Альтернативой регулярное выражение: parse_url()

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

UPDATE:

Предполагая, что $text может иметь много доменов, используйте strstr() вместо этого.

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); 
} 

и:

contains_link("AAAAAAA http://mywebsite.com"); //1 
    contains_link("foo BAaa http://www.mywebsite.com"); //1 
    contains_link("abc.com www.mywebsite.com"); // 1 
+2

Будет ли 'parse_url()' работать не будет ... Что делать, если кто-то ставит другой сайт перед его? например: 'www.stopsearchinghere.com http: // mywebsite.com' –

+0

@RobertMartin: проверить обновление. –

+0

Я ищу настоящий URL-адрес, а не статический фрагмент текста – BronzeByte

5

Я думаю, что вы ищете это:

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

Посмотри здесь в действии: http://regexr.com?30t6m


Здесь в PHP:

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

P.S. Если вы хотите быть уверены, что после этого ничего не получится, вы должны добавить $ до конца.

+1

'hello mywebsite.com' –

+0

@KarolyHorvath - По этим соображениям ваш ответ потерпит неудачу на' thisismywebsite.com'. Вопрос OP достаточно неоднозначен, чтобы позволить все это. Он должен уточнить свои потребности в дальнейшей помощи. –

+0

Как получить это как регулярное выражение PHP, которое будет работать с preg_match? И будет ли он также обнаруживать обычные http: // одни? – BronzeByte

4

, если вы ищете только для текста:

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

если вы хотите Seach для точный " Слово»(старт):

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

или (начало & конца):

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

Это должен быть правильный ответ –

+2

Это может дать некоторые ложные срабатывания, например. для следующей строки: 'http://foo.bar/mywebsite.com'. – alexg

+0

@alexg: все остальные ответы также дают ложные срабатывания. они просто ищут необязательные строки префикса/postifx, которые не помогут бит (за исключением parse_url, который дает ложные отрицания) –

Смежные вопросы