0

私はここでこのコードが機能しない理由を調べようとしましたが、どこにも行きませんでした。そして今、誰かが私を助けてくれることを望んでいます。

function validateData($string) {
    if (empty($string)) {
        return 'error';
    } elseif (strlen($string) <= 1) {
        return 'error';
    } elseif (preg_match('[a-zA-Z0-9]+\ ?', $string)) {
        return 'error';
    } else {
        return 'normal';
    }
}

上記のコードを実行すると、次を使用します。

echo validateData('Test');
echo validateData('Test!');

これらは両方とも「通常」をエコーし​​ます。ただし、2番目の例には「!」が含まれています。上記のコードのpreg_matchステートメントが原因で、文字列に「error」が返されるはずです。

達成目標。文字列をチェックして、空でないこと、1文字より長く、az、AZ、0-9、またはスペースのみが含まれていることを確認します。したがって、特殊文字はありません。

よろしくお願いします。ありがとうございました!

ケン

4

5 に答える 5

1

パターンは次のようになります。

preg_match('/([^a-zA-Z0-9 ])+/', $string);

記号は、^文字セットを無効にするために使用されます。

于 2013-02-18T05:27:01.550 に答える
1

スペースを含む文字列を検証する必要がある場合は、を使用!preg_match(pattern,$string)し、それ以外の場合はパターン\sから削除します。preg_match

 function validateData($string) {
    if (empty($string)) {
         return 'error';
    } elseif (strlen($string) <= 1) {
         return 'error';
    } elseif (!preg_match('/^[A-Za-z0-9\s]+$/',  $string)) {
         return 'error';
    } else {
       return 'normal';
    }
}
于 2013-02-18T05:27:14.527 に答える
0

試す:

preg_match('/[a-zA-Z0-9]+\ ?/', $string)
于 2013-02-18T05:19:36.823 に答える
0

交換 preg_match('[a-zA-Z0-9]+\ ?', $string)

preg_match('/[^a-zA-Z0-9]/', $string)

于 2013-02-18T05:45:39.433 に答える
0

文字列が空の場合、文字列の長さを要求すると0になります。したがって、empty($ string)のテストは、2番目のテストでカバーされているため、役に立ちません。

正規表現を使用すると、ここではメリットがなく複雑さが増します。英数字の文字列に対してtrueまたはfalseを返す専用の関数があります。ctype_alnum($ string)

関数は次のようになります。

function validateData($string) {
    return (strlen($string) <= 1 || !ctype_alnum($string)) ? 'error' : 'normal';
}
于 2013-02-18T05:48:36.737 に答える