如何检查坏词的用户名?

时间:2018-01-09 01:09:05

标签: php

已解决:使用Michael Thompson的答案和标记的“重复”问题用户

下面使用的所有代码都是PHP!

这与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知识,因为我几个月前才开始学习它,这就是我寻求帮助的原因。

谢谢!

1 个答案:

答案 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
    }
}