[英]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.