2016-02-11 33 views
-3

我建立在PHP一個簡單的詞過濾器,這裏的代碼迄今:PHP數組了preg_replace,保持大/小寫

function correct_spelling($text) { //  /\b\b/i  
    $a = array('/\bsteph\b/i', '/\bshit\b/i', '/\bfuck\b/i',  "/\bfucken\b/i", '/\benormeous\b/i'); 
    $b = array('Stephane', 'sh*t', 'f*ck', "f*ckin'", 'enormous'); 
    return preg_replace($a, $b, $text); 
} 

它的工作原理,但我想它也維持原來大寫或小寫,所以如果人寫道,例如,「鴨子」,應該知道第一個字母是大寫的,並返回:

"D*ck" 

,而不是

"d*ck" 

我如何告訴它'尊重'原始案件?

+1

絕對沒有任何目的的在您的文章中超凡脫俗,除了得罪。我猜這對一些人很有趣。您可能想要查看[是不錯的政策](http://stackoverflow.com/help/be-nice),並調整帖子。只是爲了好。 – Mogsdad

回答

2

你可以改變你的替換規則使用這樣的事情:

preg_replace('/(Vulg)a(rity)/i','$1*$2',$text); 

以替換單詞的只有很小的一部分,而不是改變整個字

這將取代這個詞來Vulg * RITY

+0

謝謝,但它只是取代了整個職位「NULL」,哈哈。 –

+0

https://ideone.com/vl1b6e - 它適用於我,可能你用我的例子錯了? –

0

這就是我想出了,非常簡單和原始的字必須是相同的長度改變的話,如果他們有不同的長度,將只使用改變了一句話:

<?php 
function correct_spelling($text) { 
    $text = 'FUcK'; 
    $a = array('/\bsteph\b/i', '/\bshit\b/i', '/\bfuck\b/i', "/\bfucken\b/i", '/\benormeous\b/i'); 
    $b = array('Stephane', 'sh*t', 'f*ck', "f*ckin'", 'enormous'); 
    $filteredText = preg_replace($a, $b, $text); 
    $cleanedText = $filteredText; 
    if (strlen($text) == strlen($filteredText)) { 
     $count = strlen($text); 
     $cleanedText = ""; 
     for ($i=0; $i < $count; $i++) { 
      if (ctype_upper($text[$i]) && $filteredText[$i] != '*') { 
       $cleanedText .= $text[$i]; 
      } else { 
       $cleanedText .= $filteredText[$i]; 
      } 
     } 
    } 
    return $cleanedText; 
} 
?> 

這裏有一個獨立的例子,你可以在一個空的PHP文件粘貼:

$text = 'FUcK'; 
$a = array('/\bsteph\b/i', '/\bshit\b/i', '/\bfuck\b/i', "/\bfucken\b/i", '/\benormeous\b/i'); 
$b = array('Stephane', 'sh*t', 'f*ck', "f*ckin'", 'enormous'); 
$filteredText = preg_replace($a, $b, $text); 
$cleanedText = $filteredText; 
if (strlen($text) == strlen($filteredText)) { 
    $count = strlen($text); 
    $cleanedText = ""; 
    for ($i=0; $i < $count; $i++) { 
     if (ctype_upper($text[$i]) && $filteredText[$i] != '*') { 
      $cleanedText .= $text[$i]; 
     } else { 
      $cleanedText .= $filteredText[$i]; 
     } 
    } 
} 
echo $cleanedText; 
+0

謝謝你的努力,但是這段代碼最終沒有任何明顯的結果。經過兩天試圖弄清楚這一點,我猜測它不能完成並放棄。 –

+0

我編輯我的答案,包括一個獨立的版本,只是簡單地迴應結果。您可以將$ text變量更改爲您的任何示例「單詞」中的第一行,它將起作用。它只會用你提供的文字。也許這是你的函數或返回句柄的一部分,這是問題?您也有其他人的評論也有問題,所以也許值得一試。 – Emylee