-1

この関数は、文字の配列をループして特殊文字をチェックし、それらのいずれかが許可された文字のリストと一致しないかどうかをチェックします。この関数の何が問題になっていますか? あなたが助けることができれば、どうもありがとうございました!

str_split_array($stringPassed); と仮定します。完全に機能します(99%確実に機能するため、他のさまざまな機能で使用しています)

    // returns true if a string has special characters
// $stringPassed = input string to split and check
// $checkWhiteSpace = check for whitespace, true or false
function hasSpecialCharacters($stringPassed, $checkWhiteSpace = true) {
    // Array of characters ALLOWED
    $allowedCharacters = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", 1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
    $arrayLen = strlen($stringPassed);
    $array = str_split_array($stringPassed);
    for($i=0;$i<$arrayLen;$i++) {
        if(!in_array($array[$i], $allowedCharacters)) {
            return true;
        } else if($checkWhiteSpace==true && $array[$i]==" ") {
            return true;
        }
    }
    return false;
}

再度、感謝します!

4

2 に答える 2

6

より良い解決策は正規表現です。

return (bool) preg_match("/[^0-9a-z".($allowWhiteSpace ? " ":"")."]/i", $stringPassed);

i、大文字と小文字を区別しません。

正規表現の詳細。

あいまいさを取り除くために にも変更$checkWhiteSpaceしました。$allowWhiteSpace

于 2012-06-08T08:49:08.557 に答える
0

その関数を破棄し、代わりに preg_match を使用してください。はるかに効率的です

function hasSpecialCharacters($stringPassed, $checkWhiteSpace = true)
{
    if($checkWhiteSpace)
    {
        $regex = "/^[a-z0-9 ]+$/" 
    }
    else
    {
        $regex = "/^[a-z0-9]+$/"
    }
    if(preg_match($regex, $stringPassed)
    {
        return true;
    }
    return false;
}

これは、よく知っておくべき正規表現チートシートです。

于 2012-06-08T08:55:01.940 に答える