[php]ctype関数でバリデート

php

PHP: Ctype 関数 – Manual

最近のフレームワークは独自にバリデート機構を持っているので昔ほどバリデートに気を使うことも少なくなりましたが、自前でバリデートすることもまだあるでしょう。一般的には、正規表現のpreg_match()やis_numeric()、is_int()などがよく使われるのですが、ctype系の関数は知らない人も居るかもしれません。

ctype関数は、C言語のctype.hという標準ライブラリに由来があります。

ctype 関数は、正規表現よりもつねに好ましく、さらに str_* および is_* のような いくつかの等価な関数よりも好ましいことに注意してください。 これは、ctype 関数がネーティブな C ライブラリを使用しており、処理が著しく 高速であるためです。PHP: Ctype 導入 – Manual

とあるように、文字の種別をチェックする場合はctype系関数は断然お勧めという訳です。特に、ctype_alnum()は知っておいて損は無いでしょう。その名の通り与えた文字列が英数字の場合にtrueを返す関数です。正規表現でやっちゃっている人も多いと思います。

ところで、ctype系関数にはこんな比較をしている人がちらほらいます。

ctype関数はCライブラリを使用しているため,is_*, str_*より高速とのこと.
だが実際に比較してみると,is_* の方が速い.ctype と is_* , str_* の処理速度比較 – memo.xight.org

上記引用記事では、is_int()とctype_digit()を比較して、is_int()の方が速いという主張をしていますが、この比較はそもそも本質的に間違っていますis_int()は型チェックのための関数であり、ctype_digit()は文字列チェックのための関数です。これらの関数は想定している対象がそもそも違うので、適材適所で使用するというのが正しいでしょう。

というわけで、ctype関数は遅いというのは偏見です。ctype関数を有効活用しましょう。

About: uechoco