2012-05-09 5 views
3

Я просмотрел интернет для чего-то, что сделает это, но оно будет работать только с одним словом.Php проверяет, содержит ли строка несколько слов

Я пытаюсь создать скрипт, который будет обнаруживать плохое имя пользователя для моего сайта, неправильное имя пользователя будет обнаружено, если имя пользователя содержит любое из слов в массиве.

Вот код, который я сделал, но не смог работать.

$bad_words = array("yo","hi"); 
$sentence = "yo"; 

if (strpos($bad_words,$sentence)==false) { 
echo "success"; 
} 

Если кто-нибудь может мне помочь, я был бы признателен.

+1

Возможный дубликат: http://stackoverflow.com/q/1916261/259457 – Travesty3

+0

А когда имя чьего-то есть «Янгс»? – Sampson

+1

Не использовать == как (0 == false), вернет true. Если функция возвращает несколько типов, используйте strict (===,! ==) –

ответ

6

использование

substr_count

для массива используется следующая функция

function substr_count_array($haystack, $needle) { 
    $count = 0; 
    foreach ($needle as $substring) { 
      $count += substr_count($haystack, $substring); 
    } 
    return $count; 
} 
1

Вы можете использовать этот код:

$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"; 
0

Вы близки. Вы можете сделать это следующим образом:

$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"; } 
+0

не должно быть, если (strpos ($ bad_word, $ sentence)! == false) { $ match = true; break; } – Liam

0
<?php 
function isUserNameCorrect() 
{ 
    Foreach($badname in $badnames) 
    { 
     if(strstr($badname, $enteredname) == false) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

Может быть, это помогает

+0

Решение не подходит для следующей проблемы: Плохое слово 'fool' не будет обнаружено, если пользователь наберет 'ifoolyou!' (Вы должны думать о частичных совпадений также –

0

I believ е предложение более чем один одно слово

Попробуйте

$badwords = array("yo","hi"); 
$string = "i am yo this is testing"; 
$word = array_intersect($badwords,explode(" " , $string)); 
if(empty($word)) 
{ 
    echo "Sucess" ; 
} 
0

К сожалению, вы не можете дать 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"; 
} 
0

Я бы реализовать это следующим образом:

$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.

1
// 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 
+0

функцию stringTester() не найден –

+0

извините за задержку – ffdigital

+0

'функция stringTester ($ корма, $ strTest) { \t $ processedFeed = нормализуют ($ корма);.? \t $ processedTest = нормализуют ($ strTest); \t \t \t \t $ пос = StrPos ($ processedFeed, $ processedTest); \t \t \t если ($ поз === ложь) {// \t === ложные \t \t \t \t \t // e cho "WORD". $ strTest. "NOT FOUND
"; \t \t \t \t return false; \t \t} else { \t \t \t // print_r ($ licitaToFilter); \t \t \t \t // echo "WORD". $ strTest. «НАЙДЕНО В
»; \t \t // эхо "IS ON LINE". $ Pos; \t \t \t \t return true; \t \t} \t } ' – ffdigital