我在网上找了很多东西,但都只能处理一个单词。
我正在尝试构建一个脚本来检测我的网站的不良用户名,如果用户名包含数组中的任何单词,就会检测到不良用户名。
这是我写的代码,但没有成功。
$bad_words = array("yo","hi");
$sentence = "yo";
if (strpos($bad_words,$sentence)==false) {
echo "success";
}
如果有人能帮我,我会非常感激。
我在网上找了很多东西,但都只能处理一个单词。
我正在尝试构建一个脚本来检测我的网站的不良用户名,如果用户名包含数组中的任何单词,就会检测到不良用户名。
这是我写的代码,但没有成功。
$bad_words = array("yo","hi");
$sentence = "yo";
if (strpos($bad_words,$sentence)==false) {
echo "success";
}
使用 substr_count 函数。
如果要对数组进行操作,请使用以下函数。
function substr_count_array( $haystack, $needle ) {
$count = 0;
foreach ($needle as $substring) {
$count += substr_count( $haystack, $substring);
}
return $count;
}
str_word_count
。 - Marcelo Rodovalho$bad_words = array("yo","hi");
$sentence = "yo you your";
// break your sentence into words first
preg_match_all('/\w+/', $sentence, $m);
echo ( array_diff ( $m[0], $bad_words ) === $m[0] ) ? "no bad words found\n" :
"bad words found\n";
// returns false or true
function multiStringTester($feed , $arrayTest)
{
$validator = false;
for ($i = 0; $i < count($arrayTest); $i++)
{
if (stringTester($feed, $arrayTest[$i]) === false )
{
continue;
} else
{
$validator = true;
}
}
return $validator;
}
//www.ffdigital.net
function stringTester($feed, $strTest) { $processedFeed = normalize($feed); $processedTest = normalize($strTest); $pos = strpos($processedFeed, $processedTest); if ($pos === false) { //=== false //echo "WORD ".$strTest." NOT FOUND <br />"; return false; } else { //print_r($licitaToFilter); //echo "WORD " . $strTest . " FOUND IN <br />"; //echo " IS ON LINE ".$pos; return true; } }
- ffdigitalfunction normalize ($string){ $trans = array('à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'ï'=>'i', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö '=>'o','ù'=>'u', 'ú'=>'u', 'ü'=>'u'); $processedString1 = strtolower($string); return (strtr($processedString1, $trans )); }
- ffdigital你很接近了。你可以按照以下方式操作:
$bad_words = array("yo","hi");
$sentence = "yo";
$match = false;
foreach($bad_words as $bad_word) {
if (strpos($bad_word,$sentence) === false) { # use $bad_word, not $bad_words
$match = true;
break;
}
}
if($match) { echo "success"; }
<?php
function isUserNameCorrect()
{
Foreach($badname in $badnames)
{
if(strstr($badname, $enteredname) == false)
{
return false;
}
}
return true;
}
或许这可以帮助你
我相信一句话不仅仅是一个单词
试试看
$badwords = array("yo","hi");
$string = "i am yo this is testing";
$word = array_intersect( $badwords,explode(" " , $string));
if(empty($word))
{
echo "Sucess" ;
}
很遗憾,你不能直接将Array
传递给函数strpos/strstr。
根据PHP.net的评论,要实现这个功能,你需要使用(或创建自己的函数)像这样的函数:
function strstr_array($haystack, $needle)
{
if ( !is_array( $haystack ) ) {
return false;
}
foreach ( $haystack as $element ) {
if ( stristr( $element, $needle ) ) {
return $element;
}
}
}
然后,只需将strpos
更改为新函数-strstr_array
:
$bad_words = array("yo","hi");
$sentence = "yo";
if (strstr_array($bad_words,$sentence)==false) {
echo "success";
}
$bad_words = array("yo","hi");
$sentence = "yo";
$valid = true;
foreach ($bad_words as $bad_word) {
if (strpos($sentence, $bad_word) !== false) {
$valid = false;
break;
}
}
if ($valid) {
echo "success";
}
$bad_words
的单词。请注意严格检查(即!==
),如果没有这个检查,当strpos
的结果为0而不是false时,检查将失败。