我总是避免使用ctype_alnum()
,因为它根据默认语言环境的行为有所不同:
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数字之外?
答案 0 :(得分:0)
编辑@Aziz Saleh评论。
所有ctype函数“根据当前语言环境检查字符或字符串是否属于某个字符类(另请参阅setlocale())。” (来自https://secure.php.net/manual/en/intro.ctype.php)
答案 1 :(得分:0)
根据文档,所有ctype
函数的行为都相同。
此扩展提供的函数根据当前语言环境检查字符或字符串是否属于某个字符类(另请参阅setlocale())。
来源:http://php.net/manual/en/intro.ctype.php
这意味着ctype_digit
也可能接受非ASCII数字。
我认为唯一的选择是坚持使用正则表达式或确保在代码之前设置默认语言环境(如果它不是变量)。