Проверьте, находится ли элемент массива в строке

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

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

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

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

$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

Решение

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

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

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

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

2

Другие решения

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

if( !preg_match( '/(\b' . implode( '\b|\b', $banned ) . '\b)/i',
$_POST['email'] )) {
echo "Match found";
}
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

Ты можешь использовать stripos как

foreach ($banned as $v) {
if (stripos($email,$v) > -1){
echo 'Banned word or character!';
}else{
echo 'Email signed up!';
}
}
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
По вопросам рекламы [email protected]