Этот вопрос уже задавался ранее о строках, однако * ни один из вопросов, которые я рассмотрел (не моды не удаляют или не говорят нам, что это дубликат, пожалуйста), на самом деле не отвечает на мой вопрос.
У меня есть целевая страница с простой регистрацией по электронной почте. В последнее время люди злоупотребляют им, вводя иностранные символы, такие как *, #, $,%, а также целенаправленно используют ненормативную лексику (вы всегда можете сказать). У меня есть массив запрещенных символов и слов, которые я использую следующим образом
$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, но все равно не испытывал радости.
Я возился с этой идеей, так как у меня не было готового куска кода, чтобы помочь.
Следующие работы:
$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;
Плюс, как я уже упоминал в комментариях; Вы должны использовать метод подтверждения, отправленный по электронной почте, если вы этого еще не сделали. Если этот человек не подтверждает свой адрес электронной почты, то «остановить прессы».
Используя регулярные выражения?
if( !preg_match( '/(\b' . implode( '\b|\b', $banned ) . '\b)/i',
$_POST['email'] )) {
echo "Match found";
}
попробуй вот так
$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;
Ты можешь использовать stripos
как
foreach ($banned as $v) {
if (stripos($email,$v) > -1){
echo 'Banned word or character!';
}else{
echo 'Email signed up!';
}
}
Вам нужно будет пройтись по каждому запрещенному слову и посмотреть, содержит ли ваше электронное письмо какое-либо из запрещенных слов / символов.
$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!'