2015-01-07 50 views
3

我使用下面的正則表達式來隱藏網站網址,它的效果很好。在正則表達式中允許一些URL

$message_text=preg_replace("/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/", "<website hidden>", htmlspecialchars($message_text)); 

$ MESSAGE_TEXT將是一個漫長的消息將包含許多網址與facebook.com或gmail.com

現在我想允許某些URL的像facebook.com或google.com或​​ 沿我很難修改這個表達式。 請幫我理清這個問題 謝謝

+3

就在這個喜歡做的檢查:'如果( !in_array($ message_text,$ allowed)){//正則表達式} else {//很好}',這是否對你有用? – Rizier123

+0

它不適用於我,因爲$ message_text將是一個長的消息,將內容許多URL與facebook.com或gmail.com –

回答

3

我認爲這應該爲你工作:

<?php 

    $message_text = "sdfhsdkklsdkjj www.facebook.com www.google.com http://gmail.com"; 
    echo $message_text = preg_replace_callback('/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/', 
     function ($match) { 

      $allowed = array("www.facebook.com", "www.google.com"); 
      if(!in_array($match[1], $allowed)) 
       return "&#60;website hidden&#62;"; 

      return $match[1]; 
     }, htmlspecialchars($message_text)); 

?> 

輸出:

sdfhsdkklsdkjj www.facebook.com www.google.com <website hidden> 
+0

編輯 - 我很確定他有什麼是一個很長的字符串,可能有一個網址。他正在使用preg_replace刪除這些網址。 $ message_text不會只是URL。 –

+1

$ message_text將是很長的消息,將內容許多URL與facebook.com或gmail.com –

+0

@SunilShivalkar更新我的答案應該現在工作! – Rizier123