2015-09-11 3 views
-1

Этот вопрос задан раньше, чем строки, однако * ни один из вопросов, которые я просмотрел (не моды не удаляют или не сообщают нам, что это дубликат, пожалуйста) на самом деле отвечают на мой вопрос ,Проверьте, является ли элемент массива в строке

У меня есть целевая страница с простой регистрацией через почтовый ящик. В последнее время люди злоупотребляют им, введя иностранные символы, такие как *, #, $,%, а также с использованием ненормативной лексики (вы всегда можете сказать). У меня есть массив запрещенных символов и слов, я использую следующие

$banned = array("f**k", "f******", "blah", "*", "#", "$", "%"); 

я могу сказать наверняка кто был преднамеренно пытается снова и снова, чтобы пройти через это, потому что я пропустил некоторые символы и вдруг пучка адресов введена, не имеет никакого смысла. Мне нужно знать, как использовать цикл, чтобы пройти и найти, если следующий содержит какой-либо из запрещенных слов в массиве

$email = $_POST['email']; 

Я попытался с помощью

$arrlen = count($banned); 
for($i=0; $i < $arrlen; $i++) { 
    if(stripos($email, $banned[$i] !== false) { 
     echo 'Banned word or character!'; 
    } 
    else { 
     echo 'Email signed up!'; 
    } 
} 

Это не работает в все! Я попробовал старую функцию is_str_contain, но ошибка функции не существует.

Я пробовал нормальные strpos также, все еще не радость.

+1

Что: * Это не работает вообще * означает? У вас есть: «Предупреждение PHP: не работает вообще в строке 4»? Также добавьте отчет об ошибках ('ini_set (" display_errors ", 1); \t error_reporting (E_ALL);') в начало вашего файла (ов) и проверьте наличие ошибок + Дайте нам реальный пример – Rizier123

+0

Sidenote: если это предназначено для перехода на db и/или в качестве подписки, вы должны в идеале использовать метод подтверждения. Если письмо не подтвердилось, не впускайте его. Вот как вы держите riff-raff вне ;-) –

+2

Просто чтобы добавить это в комментарии, вам не хватает скобки ')' в вашем операторе if – Rizier123

ответ

0

попробовать, как этот

$banned = array("****", "*******", "blah", "*", "#", "$", "%"); 

$email = $_POST['email']; 
foreach ($email as $em) { 
    //if (strstr($em, $banned)) { // mine version 
    if (strpos($em, $banned) !== FALSE) { // Yoshi version 
     echo "Match found"; 
     return true; 
    } 
} 
echo "Not found!"; 
return false; 
+0

Зачем OP * попробовать вот так *? Что вы изменили и почему? – Rizier123

+0

Ничего из этого, похоже, не сработало. Я пробовал каждый из них, и все еще можно было ввести введенный адрес электронной почты. – GeordieDave1980

0

Вам нужно будет перебирать каждое запрещенное слово и посмотреть, если ваш адрес электронной почта содержит какую-либо из запрещенного слова/символа.

$banned = array("****", "*******", "blah", "*", "#", "$", "%"); 
$email = $_POST['email']; 
$banned = false; 
for($i=0; $i < count($banned); $i++) { 
    if(strrpos($email, $banned[$i]) != FALSE) { 
     $banned = true; 
     break; 
    } 
} 
echo $banned ? 'Banned word or character!' : 'Email signed up!' 
+0

какой OP? Синтаксис вопросительного знака? –

+0

Зачем нужно это делать? Хороший ответ всегда будет объяснять, что было сделано, и почему это было сделано именно так, не только для OP, но и для будущих посетителей SO. –

0

Вы можете использовать stripos в

foreach ($banned as $v) { 
    if (stripos($email,$v) > -1){ 
     echo 'Banned word or character!'; 
    }else{ 
     echo 'Email signed up!'; 
    } 
} 
+0

Это работало только для первого слова в массиве, все остальное после этого, когда оно было введено, разрешило его и отобразило «Подпись по электронной почте!». Кажется, я не могу найти ничего, что работает вообще. – GeordieDave1980

+0

Затем удалите этот «break» из цикла. Я добавил перерыв, чтобы проверить, что если какое-либо из этих слов соответствует, то нет необходимости проверять дальнейшие значения. –

+0

К сожалению, это не сработало. Еще только поймал первое слово в массиве. Серьезно не понимаю, почему ничего не работает. – GeordieDave1980

0

Использование регулярных выражений?

if(!preg_match('/(\b' . implode('\b|\b', $banned) . '\b)/i', 
$_POST['email'])) { 
    echo "Match found"; 
} 
+0

Вопрос? Или ответ? Почему OP должен это делать? Хороший ответ всегда будет объяснять, что было сделано, и почему это было сделано именно так, не только для OP, но и для будущих посетителей SO. –

+0

Исследуйте массив и выполните поиск заданной строки в стробированной строке массива. Код делает это. –

+0

Редактировать сообщение, чтобы добавить объяснение. –

2

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

следующие работы:

$banned = array("badword1", "badword2", "blah", "*", "#", "$", "%"); 
$_POST['email'] = "[email protected]"; 
$email = $_POST['email']; 

    foreach ($banned as $ban) { 
     if (stripos($email, $ban) !== FALSE) { 
      echo "Match found."; 
      return true; 
     } 
    } 
    echo "No match found."; 
    return false; 

Плюс, как я уже говорил в комментариях; вы должны использовать метод подтверждения, отправленный по электронной почте, если вы этого еще не делаете. Если это лицо не подтвердит свой адрес электронной почты, то «остановить прессы».

+0

Нет ответа от ОП, поэтому я двигаюсь дальше. * Arrivederci * –