[英]Check if an array element is in a string
之前曾有人问过有关字符串的问题,但是*我所审查的所有问题(不是mod都不会删除或告诉我们这是重复的问题)实际上没有回答我的问题。
我有一个登陆页面,该页面通过电子邮件框进行了简单的注册。 最近,人们一直在通过输入*,#,$,%等外来字符来滥用它,并且故意使用亵渎(您总能看出)。 我使用了一系列禁止使用的字符和单词,如下所示
$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'] = "emailbadword1@example.com";
$email = $_POST['email'];
foreach ($banned as $ban) {
if (stripos($email, $ban) !== FALSE) {
echo "Match found.";
return true;
}
}
echo "No match found.";
return false;
另外,正如我在评论中提到的那样; 您应该使用通过电子邮件发送的确认方法(如果尚未这样做)。 如果该人未确认其电子邮件地址,则“停止新闻”。
这样尝试
$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;
您将需要遍历每个禁止的单词,并查看您的电子邮件中是否包含任何禁止的单词/字符。
$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!'
您可以将stripos
用作
foreach ($banned as $v) {
if (stripos($email,$v) > -1){
echo 'Banned word or character!';
}else{
echo 'Email signed up!';
}
}
使用正则表达式?
if( !preg_match( '/(\b' . implode( '\b|\b', $banned ) . '\b)/i',
$_POST['email'] )) {
echo "Match found";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.