2011-10-18 83 views
0

經過2次嘗試(感謝堆棧溢出)後,我終於得到了我的正則表達式url,並按照我的意願以不同的方式將特定的事情列入黑名單。然而,它不能正常工作,而是的;它列入黑名單的話,並防止它們被輸入到數據庫中,它拋出了一個錯誤:preg_match()語句中的未知修飾符

PHP Warning: preg_match() [function.preg-match]: Unknown modifier '\\' in C:\wamp\www\anonpost\index.php on line 324, referer: http://localhost/anonpost/index.php

這裏是我的代碼:

$disallowedWords1 = array(
'offensive','words' 
); 

foreach ($disallowedWords1 as $word1) { 
    if (preg_match("/\b$word1\b/i", $entry)) { 
    die('The word or phrase ' . $word . ' is not allowed...'); 
    } 
} 

$urlRegex = '(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*'; 
if (preg_match($urlRegex, $entry)) { 
    die('The word or phrase ' . $word . ' is not allowed...'); 

} 

我看了一些帖子說是在網站上類似,他們都非常明確地指出,沒有分隔符,我也有這些,所以我真的失去了它的可能性。任何幫助將不勝感激:)

(對於錯誤的一個例子,其中有三個[三個不同的preg_match()語句,每個只有勉強不同,主要是它發現文本的方式]嘗試發佈,它不是一個問題,它只是使它看起來凌亂:在正則表達式http://aviatex14.co.uk/anonpost/

+0

見http://php.net/manual/en/regexp.reference.delimiters.php和可能也'preg_quote'。 – mario

回答

1

逃避所有的/或使用另一個章節前分隔符,即~#

if (preg_match("#$urlRegex#", $entry)) { 

而且您正則表達式可以縮短:

$urlRegex = "(https?|ftp)://([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&;%$-]+)*@)*((?:(25[0-5]|2[0-4]\d|[01]\d{2}|[1-9]\d|[1-9])\.){3}(25[0-5]|2[0-4]\d|[01]\d{2}|[1-9]\d|[1-9]|0)|localhost|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:\d+)*(($|[a-zA-Z0-9.,?'+\\&;%\$#=~_-]+))*"; 
-1

使用#標籤,即:

preg_match("#/\b$word1\b/i#", $entry) 

(您可能需要刪除開始斜槓)

相關問題