2013-05-09 29 views
1
if (strtolower(strpos($_POST['username']), "host") !== FALSE) { 
        $errors[] = 'You cannot have the word HOST in your name.'; 
       } 

現在,這是完美的,如果我想用的名字Host Andy例如阻止某人,但可怕的如果有人創建了用戶名和Ghost的一致好評..如何過濾它只停止第一個字是主機?我需要在我註冊過程中禁止某些話

編輯:如果host(如,主機後面有一個空格)是在字符串和錯誤的開始,否則

if (strtolower(strpos($_POST['username']), "host") === 0) { 
    $errors[] = 'You cannot have the word HOST in your name.'; 
    } 
+0

你爲什麼不創建的屏蔽詞的功能,並使用'strpos' ? – 2013-05-09 02:47:07

回答

2

您可以使用preg_match來檢查基於邊界上的字:

$pattern = "/\bhost\b/i"; 

if(preg_match($pattern, $_POST['username'])) 
{ 
    $errors[] = 'You cannot have the word HOST in your name.'; 
} 

編輯

只匹配第一個字時,只要將第一個字邊界:

$pattern = "/^host\b/i"; 

進一步編輯:添加^字符開頭的字符串主機這個詞。這說明了正則表達式必須以主機作爲單個字開始,不區分大小寫。

+0

可以這樣做只匹配字符串的開始? – Patashu 2013-05-09 02:29:10

+0

是的。刪除第一個邊界。 $ pattern =「/ host \ b/i」; – 2013-05-09 02:29:52

+0

這很好。謝謝,我會在3分鐘內接受你的回答。 – user2305310 2013-05-09 02:30:03

0

stripos($_POST['username'], "host ") === 0將是真實的。

如果第一個單詞之前的空格是可能的,您可能首先需要使用http://www.php.net/manual/en/function.ltrim.php

如果帶有符號的主機或者帶有符號的主機在字符串的開始處也需要禁止,請告訴我。

雖然,我會質疑爲什麼主機需要被禁止從用戶名開始。它可以用不同的方式表示嗎?例如,只有主機獲得綠色斜體名稱才能欺騙主機。

+1

'strtolower'會將一個整數轉換爲一個字符串 – zerkms 2013-05-09 02:23:01

+1

如果我想讓我的用戶名成爲「敵對」,我該怎麼辦? – 2013-05-09 02:23:24

+0

我認爲它現在是正確的。 – Patashu 2013-05-09 02:25:38

0

這是我用來過濾我的網站上的壞詞。用它來滿足你的喜好。它應該指向正確的方向,因爲它只會過濾「我是壞字」而不是「iamabadword」。

function filterBadWords($str) { 
    $badWordsFile = "badwords.txt"; 
    $badFlag = 0; 
    if(!is_file($badWordsFile)) { 
     echo "ERROR: file missing: ".$badWordsFile; 
     exit; 
    } 
    else { 
     $badWordsFH = fopen($badWordsFile,"r"); 
     $badWordsArray = explode("\n", fread($badWordsFH, filesize($badWordsFile))); 
     fclose($badWordsFH); 
    } 
    foreach ($badWordsArray as $badWord) { 
     if(!$badWord) continue; 
     else { 
      $regexp = "/\b".$badWord."\b/i"; 
      $badword_add_last_letter = $badWord.substr($badWord, -1); 
      $regexp_add_last_letter = "/\b".$badword_add_last_letter."\b/i"; 
      if(preg_match($regexp,$str)) $badFlag = 1; 
      if(preg_match($regexp_add_last_letter,$str)) $badFlag = 1; 
     } 
    } 
    if(preg_match("/\[url/",$str)) $badFlag = 1; 
    return $badFlag; 
} 

和文件badwords.txt只是看起來像這樣的文件:

badword1 
badword2 
badword3 

編輯:

如果您只是想字HOST,然後使用此功能:

function filterString($str) { 
    if(preg_match("/\bhost\b/i",$str)) return true; 
    return false; 
} 
+0

非常感謝您向我提供此信息,我將把它保存以備將來參考。 – user2305310 2013-05-09 02:30:22

+0

歡迎您!它已經派上用場了! – alexander7567 2013-05-09 02:34:56

+0

它看起來像這樣可以工作,如果你只是檢查,看看第一個字是主機,然後停止。 – Patashu 2013-05-09 02:35:06

1

,如果你想停止用戶名要創建與"host%"開始,然後做:

if (substr(ltrim(strtolower($_POST["username"])),0,4)=="host") { 
    $errors[] = 'You cannot have the -starting- word HOST in your name.'; 
} 

UPDATE:

我加入了ltrim只是爲了保持對更多更安全討厭的方法;
隨時可以將其刪除,並在您通過"host"的情況下處理修剪。(?)

最後,雖然它沒有明確的,如果你想停止"host"但允許"host ",只是改變:

if (substr(ltrim(strtolower($_POST["username"])),0,5)=="host ") { 
+0

我可以使用「敵對安迪」這個名字嗎? – Patashu 2013-05-09 02:30:36

+0

不,你不能,它開始於「主機」 – 2013-05-09 02:32:22

+1

敵對安迪不會喜歡這個。 – 2013-05-09 02:48:31

相關問題