1
if (strtolower(strpos($_POST['username']), "host") !== FALSE) {
                    $errors[] = 'You cannot have the word HOST in your name.';
                }

现在,如果我想阻止某人使用该名称,这是完美的Host Andy,但如果有人创建用户名Ghost等,那就太可怕了。我如何过滤它以仅阻止第一个单词成为主机?

编辑:

    if (strtolower(strpos($_POST['username']), "host") === 0) {
    $errors[] = 'You cannot have the word HOST in your name.';
    }
4

4 回答 4

2

您可以使用 preg_match 根据边界检查单词:

$pattern = "/\bhost\b/i";

if(preg_match($pattern, $_POST['username']))
{
    $errors[] = 'You cannot have the word HOST in your name.';
}

编辑

要仅匹配第一个单词,只需删除第一个单词边界:

$pattern = "/^host\b/i";

进一步编辑:添加 ^ 字符以单词 host 开头的字符串。这告诉正则表达式它必须以 host 作为一个单词开头,不区分大小写。

于 2013-05-09T02:27:29.310 回答
1

如果您想停止创建以 开头的用户名"host%",请执行以下操作:

if (substr(ltrim(strtolower($_POST["username"])),0,4)=="host") {
   $errors[] = 'You cannot have the -starting- word HOST in your name.';
}

更新:

我添加了ltrim只是为了让事情更安全,以防止更讨厌的方法; 当您通过箱子
时,请随意将其取下并处理修剪。"host"

最后,虽然不清楚,但如果您想停止"host"但允许"host "(?),只需更改:

if (substr(ltrim(strtolower($_POST["username"])),0,5)=="host ") {
于 2013-05-09T02:29:19.960 回答
0

stripos($_POST['username'], "host ") === 0如果host(如主机后跟空格)位于字符串的开头,则为真,否则为假。

如果第一个单词之前可以有空格,您可能需要先使用http://www.php.net/manual/en/function.ltrim.php

如果主机前面有符号,或者主机后面有符号,在字符串的开头也需要禁止让我知道。

不过,我会质疑为什么主机需要从用户名开始就被禁止。可以用不同的方式表示吗?例如,只有主机使用绿色斜体名称,才能欺骗主机。

于 2013-05-09T02:22:04.790 回答
0

这是我用来过滤我网站上的坏词的方法。根据自己的喜好使用它。它应该为您指明正确的方向,因为它只会过滤“我是一个坏词”而不是“iamabadword”。

function filterBadWords($str) {
    $badWordsFile = "badwords.txt";
    $badFlag = 0;
    if(!is_file($badWordsFile)) {
        echo "ERROR: file missing: ".$badWordsFile;
        exit;
    }
    else {
        $badWordsFH = fopen($badWordsFile,"r");
        $badWordsArray = explode("\n", fread($badWordsFH, filesize($badWordsFile)));
        fclose($badWordsFH);
    }
    foreach ($badWordsArray as $badWord) {
        if(!$badWord) continue;
        else {
            $regexp = "/\b".$badWord."\b/i";
            $badword_add_last_letter = $badWord.substr($badWord, -1);
            $regexp_add_last_letter = "/\b".$badword_add_last_letter."\b/i";
            if(preg_match($regexp,$str)) $badFlag = 1;
            if(preg_match($regexp_add_last_letter,$str)) $badFlag = 1;
        }
    }
    if(preg_match("/\[url/",$str)) $badFlag = 1;
    return $badFlag;
}

而文件 badwords.txt 只是一个看起来像这样的文件:

badword1
badword2
badword3

编辑:

如果你只是想要 HOST 这个词,那么使用这个函数:

function filterString($str) {
    if(preg_match("/\bhost\b/i",$str)) return true;
    return false;
}
于 2013-05-09T02:26:56.017 回答