それがデフォルトロケールに基づいて異なる動作をしますので、私はctype_alnum()
を常にを避ける:ctype_digit()はデフォルトのロケールを使用していますか?
setlocale(LC_ALL, 'fr_FR');
$char = "\xe9"; // LATIN SMALL LETTER E WITH ACUTE (ISO-8859-1)
var_export(ctype_alnum($char)); // true
を私が代わりにpreg_match('/^[a-zA-Z0-9]+$/')
を使用する理由、それは一貫して唯一のASCII文字を受け入れるため、どのようなロケールセットのこと。
ctype_digit()
と同様の警告がありますか?
0-9 ASCII数字以外の文字は使用できますか?
特にPHPのドキュメントを信頼しているとは限りません。特に、情報を省略すると*です。それがロケールに依存しないことが明確に文書化されていれば、確かにそれを信じるでしょう。 – Benjamin
合意した@ベンジャミンしかし、この場合は、ドキュメントまたはGoogle以外では何も表示されていません。 – Gab
Ctype関数は、開始以来常にロケールを反映しています。 –