我在php中构建了一个简单的文字过滤器,这里是迄今为止的代码:
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);
}
它有效,除了我还希望保持原始的大写或小写,所以如果这个人写,例如,#34; Duck,"它应该知道第一个字母是大写的并且返回:
"D*ck"
而不是
"d*ck"
我如何告诉它尊重'原案件?
答案 0 :(得分:2)
您可以更改替换规则以使用以下内容:
preg_replace('/(Vulg)a(rity)/i','$1*$2',$text);
因此它只替换了单词的一小部分而不是改变整个单词
这将取代单词为Vulg * rity
答案 1 :(得分: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;