这个问题之前已经问过关于字符串,但是*没有一个问题我已经审查过(不是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,但是函数不存在的错误回来了。
我也尝试了正常的字符串,仍然没有乐趣。
由于没有现成的代码帮助,我一直在琢磨这个想法。
以下作品:
$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;
另外,正如我在评论中提到的;如果你还没有这样做,你应该使用通过电子邮件发送的确认方法。如果那个人没有确认他们的电子邮件地址,那么"stop the压力机"
使用正则表达式?
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!'