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";

さらに編集: ^ 文字を追加すると、ホストという単語で文字列が始まります。これは、大文字と小文字を区別しない単一の単語としてホストで始まる必要があることを正規表現に伝えます。

于 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 ") === 0host(例のように、ホストの後にスペースが続く) が文字列の先頭にある場合は true になり、それ以外の場合は false になります。

最初の単語の前にスペースができる場合は、最初にhttp://www.php.net/manual/en/function.ltrim.phpを使用することをお勧めします。

その前に記号があるホスト、またはその後に記号があるホストも、文字列の先頭で禁止する必要がある場合は、私に知らせてください。

ただし、なぜ Host をユーザー名の最初から禁止する必要があるのか​​疑問に思います。別の方法で示すことはできますか?たとえば、ホストのみが緑色のイタリック体の名前を取得すると、ホストのスプーフィングが不可能になります。

于 2013-05-09T02:22:04.790 に答える
0

これは、私のサイトで悪い言葉をフィルタリングするために使用するものです. お好みでお使いください。「iamabadword」ではなく「i am a badword」のみをフィルタリングするため、正しい方向に向けられるはずです。

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 に答える