In PHP versions before 4.4.1, ctype functions have a bug handling very large integers.
http://bugs.php.net/bug.php?id=34645
See Crimson's comment under ctype_digit, or this test code from the bug:
<?php
$id = 394829384;
var_dump($id);
ctype_digit($id);
var_dump($id);
?>
Expected result:
----------------
int(394829384)
int(394829384)
Actual result:
--------------
int(394829384)
NULL
The fix is to cast it as a string:
<?php
ctype_digit((string)$id);
?>
... or use a current version of PHP!
XVII. 文字型 (ctype) 関数
導入
以下の関数は、現在のロケール(setlocale()も参照) に基づき文字または文字列がある文字クラスに含まれるかどうかを調べます。
整数の引数を指定してコールした場合、これらの関数は、ctype.h に記述された C の同名の関数と全く同様に動作します。 これは、256 より小さな整数が指定された場合、 指定した範囲 (数値は 0x30-0x39) に収まっているかどうかを 調べるために、そのアスキー値を使用することを意味します。 数値が -128 および -1 (境界を含む) の間の場合、256 が追加され、 その数字に関してチェックが行われます。
文字列引数を指定してコールした場合、これらの関数は、その文字列の全 ての文字を調べ、その文字列の全ての文字が要求された基準に一致する場 合にのみ TRUE を返します。
文字列または整数以外のものを指定した場合は、直ちに FALSE が 返されます。
ctype 関数は、正規表現よりもつねに好ましく、さらに str_* および is_* のような いくつかの等価な関数よりも好ましいことに注意してください。 これは、ctype 関数がネーティブな C ライブラリを使用しており、処理が著しく 高速であるためです。
要件
常に利用可能な標準 C ライブラリ関数以外は不要です。
インストール手順
PHP 4.2.0以降、これらの関数はデフォルトで有効となりました。 以前のバージョンでは、configure に--enable-ctypeを指定してPHPをコンパイル する必要があります。--disable-ctypeによりctypeを無効にすること ができます。
Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。
注意: ctypeの組込みサポートは、PHP 4.3.0で利用可能です。
実行時設定
設定ディレクティブは定義されていません。
リソース型
リソース型は定義されていません。
定義済み定数
定数は定義されていません。
目次
- ctype_alnum — 英数字かどうかを調べる
- ctype_alpha — 英字かどうかを調べる
- ctype_cntrl — 制御文字かどうかを調べる
- ctype_digit — 数字かどうかを調べる
- ctype_graph — 空白以外の印字可能な文字かどうかを調べる
- ctype_lower — 小文字かどうかを調べる
- ctype_print — 印字可能な文字かどうかを調べる
- ctype_punct — 空白、英数字以外の出力可能な文字かどうかを調べる
- ctype_space — 空白文字かどうか調べる
- ctype_upper — 大文字かどうか調べる
- ctype_xdigit — 16 進数を表す文字かどうかを調べる
文字型 (ctype) 関数
03-Jan-2006 05:58
In case the ctype_*() functions aren't compiled in your PHP and you can't recompile for some reason (e.g. shared host) you can use the compatability functions from the MediaWiki project which use preg_* as a replacement[1], removing lines 2 and 3 in the source should make them suitable for usage elsewhere.
Shameless self-advertisement, but hey, we find them useful;)
1. A tinyurl because the submission script complained about long lines: http://tinyurl.com/7hz4l
1. The real url split up:
http://cvs.sourceforge.net/viewcvs.py/*checkout*/
wikipedia/phase3/includes/compatability/ctype.php