这与Stack Overflow上提出的其他问题不一样我尝试过人们已经联系过的示例,没有什么能对我有用!
在StackOverflow上提问
我已经搜索了很多次,并尝试了许多不同的教程,所有这些教程都与其他教程不同,使其更加混乱。使用像preg_match(),strpos()等代码并且无法正确使用它。
主要问题:
我的网站上有注册表格。例如,如果用户使用Bad或BadWord等用户名注册,我希望它阻止他们这样做。
我有一系列坏话:
$badWords = array('some', 'bad', 'words');
我的用户名变量是:
$username
我想做一个检查,例如,如果Bad或BadWords包含数组中的一个单词,如果有,那么它将回显'检测到坏单词'。
伪代码例如:
if ($username contains $badWords) {
echo 'bad word detected!';
}
我没有最好的PHP知识,因为我几个月前才开始学习它,这就是我寻求帮助的原因。
谢谢!
答案 0 :(得分:1)
最简单的方法是使用for循环遍历数组,然后检查字符串中是否存在每个索引。这可以这样实现:
$badWords = array('fk', 'st', 'ct', 'bd', 'dk');
$containsBadWord = false;
foreach ( $badWords as $badWord ) {
if ( stripos($username, $badWord) ) {
$containsBadWord = true;
break; //We do this just to save a few loops where unneccesary
}
}
if ( $containsBadWord ) {
echo 'That username contains a word or words that are undesirable. Please pick a different username.';
} else {
echo 'That username does not contain a word or words that are undesirable, and you can use that.';
//Provided that the username passes other checks such as whether it has not been used before
}
由于条带不区分大小写,我建议在此上下文中使用stripos而不是strpos。此外,如果您不理解foreach,请单击链接以在PHP网站上了解有关它的更多信息。 foreach在此处的行为与for循环相同,如下所示:
$count = count($badWords);
for ( $i=0; $i<$count; $i++ ) {
if ( stripos($username, $badWords[$i]) ) {
$containsBadWord = true;
break; //We do this just to save a few loops where unneccesary
}
}