使用 stripos 在 PHP 中检查错误字词
Bad word check in PHP using stripos
我在 php 中实现了这个 "bad word" 检查功能:
# bad word detector
function check_badwords($string) {
$badwords = array(a number of words some may find inappropriate for SE);
foreach($badwords as $item) {
if(stripos($string, $item) !== false) return true;
}
return false;
}
它工作正常,除了我遇到了一个小问题。如果 $string 是:
Who is the best guitarist ever?
...它 return 是真的,因为与 Who ($string) 和 ho 匹配(在 $badwords 数组中)。如何修改该函数,使其只检查完整的单词,而不仅仅是 部分单词?
- check_badwords('She is a ho'); //应该return真
- check_badwords('Who is she?'); //应该return假
谢谢!
您可能想用 preg_match
替换 stripos
如果你能使它成为一个更好的正则表达式,你会更有力量:
preg_match("/\s($string){1}\s/", $input_line, $output_array);
为了检查完整的单词,您应该使用 regular expressions:
function check_badwords($string)
{
$badwords = array(/* the big list of words here */);
// Create the regex
$re = '/\b('.implode('|', $badwords).')\b/';
// Check if it matches the sentence
return preg_match($re, $string);
}
regex
的工作原理
正则表达式以特殊序列 \b
开始和结束,即 matches a word boundary(即,当一个单词字符后跟一个非单词字符时,反之亦然;单词字符是字母,数字和下划线)。
在两个单词边界之间有一个 subpattern,其中包含由 |
分隔的所有不良单词。子模式匹配任何坏词。
如果你想知道发现了什么坏词你可以改变函数:
function check_badwords($string)
{
$badwords = array(/* the big list of words here */);
$re = '/\b('.implode('|', $badwords).')\b/';
// Check for matches, save the first match in $match
$result = preg_match($re, $string, $match);
// if $result is TRUE then $match[1] contains the first bad word found in $string
return $result;
}
您甚至可以将 $string 小写,然后使用 stripos 或正则表达式,只需使用 in_array()
。那将与整个单词相匹配。
我在 php 中实现了这个 "bad word" 检查功能:
# bad word detector
function check_badwords($string) {
$badwords = array(a number of words some may find inappropriate for SE);
foreach($badwords as $item) {
if(stripos($string, $item) !== false) return true;
}
return false;
}
它工作正常,除了我遇到了一个小问题。如果 $string 是:
Who is the best guitarist ever?
...它 return 是真的,因为与 Who ($string) 和 ho 匹配(在 $badwords 数组中)。如何修改该函数,使其只检查完整的单词,而不仅仅是 部分单词?
- check_badwords('She is a ho'); //应该return真
- check_badwords('Who is she?'); //应该return假
谢谢!
您可能想用 preg_match
替换 stripos如果你能使它成为一个更好的正则表达式,你会更有力量:
preg_match("/\s($string){1}\s/", $input_line, $output_array);
为了检查完整的单词,您应该使用 regular expressions:
function check_badwords($string)
{
$badwords = array(/* the big list of words here */);
// Create the regex
$re = '/\b('.implode('|', $badwords).')\b/';
// Check if it matches the sentence
return preg_match($re, $string);
}
regex
的工作原理
正则表达式以特殊序列 \b
开始和结束,即 matches a word boundary(即,当一个单词字符后跟一个非单词字符时,反之亦然;单词字符是字母,数字和下划线)。
在两个单词边界之间有一个 subpattern,其中包含由 |
分隔的所有不良单词。子模式匹配任何坏词。
如果你想知道发现了什么坏词你可以改变函数:
function check_badwords($string)
{
$badwords = array(/* the big list of words here */);
$re = '/\b('.implode('|', $badwords).')\b/';
// Check for matches, save the first match in $match
$result = preg_match($re, $string, $match);
// if $result is TRUE then $match[1] contains the first bad word found in $string
return $result;
}
您甚至可以将 $string 小写,然后使用 stripos 或正则表达式,只需使用 in_array()
。那将与整个单词相匹配。