10

PHP を使用して連絡先フォームを検証しています。次のコードを使用しました。

if (ctype_alpha($name) === false) {
            $errors[] = 'Name must only contain letters!';
}

このコードは問題なく動作しますが、検証が過剰であり、スペースを許可しません。試してみましctype_alpha_sたが、致命的なエラーが発生します。

どんな助けでも大歓迎です

4

4 に答える 4

30

正規表現はやり過ぎで、このような単純なタスクではパフォーマンスが低下します。ネイティブの文字列関数の使用を検討してください。

if (ctype_alpha(str_replace(' ', '', $name)) === false) {
  $errors[] = 'Name must contain letters and spaces only';
}

これにより、アルファ チェックを実行する前にスペースが取り除かれます。タブと改行が問題になる場合は、代わりにこれを使用することを検討できます。

str_replace(array("\n", "\t", ' '), '', $name);
于 2013-03-11T18:54:45.323 に答える
11

ctype_alpha は文字のみをチェックします [A-Za-z]

目的に使用する場合は、まず文字列からスペースを削除してから ctype_alpha を適用する必要があります。

しかし、検証を確認するために preg_match に行きます。このようなことができます。

if ( !preg_match ("/^[a-zA-Z\s]+$/",$name)) {
   $errors[] = "Name must only contain letters!";
} 
于 2013-03-11T19:00:49.163 に答える
1
if (ctype_alpha(str_replace(' ', '', $name)) === false)  {
  $errors[] = 'Name must contain letters and spaces only';
}
于 2016-06-06T10:56:33.810 に答える