2010-05-04 27 views
9

我想知道如何檢查一個字符串分解成preg_match數組,以查看它是否以www開頭。我已經有一個檢查http://www使用preg_match檢測網址?沒有http://在字符串

function isValidURL($url) 
{ 
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); 
} 

$stringToArray = explode(" ",$_POST['text']); 

    foreach($stringToArray as $key=>$val){ 
    $urlvalid = isValidURL($val); 
    if($urlvalid){ 
    $_SESSION["messages"][] = "NO URLS ALLOWED!"; 
    header("Location: http://www.domain.com/post/id/".$_POST['postID']); 
    exit(); 
    } 
    } 

謝謝! Stefan

+2

你可以顯示一些你已經嘗試過的代碼嗎?這裏有更多的人會幫助你解決你正在處理的問題,並給你答案。只要得到一個要求併產生一個答案就是我得到的報酬。 – 2010-05-04 01:33:21

+0

在工作代碼中添加到目前爲止 – 2010-05-04 01:39:09

回答

11

你想要的東西,如:

%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i 

這是使用|在開始時匹配http://www。我將分隔符更改爲%以避免與|衝突

+0

只是一個注意:像http://wwwtumblr.com網址也將通過這個正則表達式。 – joshholat 2012-02-10 16:52:46

+4

這不是真的......第二組是'(www \。)',它需要''''後面的'.''。另外,我在這裏測試了「wwwtumblr.com」的正則表達式:http://www.solmetra.com/scripts/regex/index.php,但沒有通過。 然而,這*將*匹配類似www.tumblrcom。最大的錯誤可能是第三組中未經轉義的'。'。這些天我通常會做'([a-z0-9 - ] \。)+([a-z0-9 - ])'以匹配子域和tld。 – 2012-02-15 09:56:56

-2

嘗試implode($myarray, '').strstr("www.")==0。這會將數組內插入一個字符串,然後檢查www.是否位於字符串的開頭(索引0)。

+0

我首先爆炸了字符串,因爲網址可能是其中途的一部分,例如,你好你是如何www.google.com – 2010-05-04 01:36:58

+0

http://daringfireball.net/2009/11/liberal_regex_for_matching_urls – user956584 2012-04-20 22:39:04

0

我炸串,首先是網址可能是中途就如hello how are you www.google.com

爆炸字符串並使用foreach語句。

如:

$string = "hello how are you www.google.com"; 
$string = explode(" ", $string); 
foreach ($string as $word){ 
    if ((strpos($word, "http://") === 0) || (strpos($word, "www.") === 0)){ 
    // Code you want to excute if string is a link 
    } 
} 

注意,你必須使用===運算符,因爲strpos可以返回,將返回一個0這將顯示爲false

+0

你將如何提取鏈接? – Sobiaholic 2013-07-26 12:39:08