此问题已在此处有答案:
How do I detect non-ASCII characters in a string?(8个回答)上个月关门了。在PHP中,确定某个给定的UTF-8文本是否是纯ASCII的最快方法是什么?
5fjcxozz1#
一个可能更快的函数是使用一个负数字符类(因为正则表达式可以在遇到第一个字符时停止,并且不需要在内部捕获任何东西):
function isAscii($str) { return 0 == preg_match('/[^\x00-\x7F]/', $str); }
没有正则表达式(基于我的评论){
function isAscii($str) { $len = strlen($str) { for ($i = 0; $i < $len; $i++) { if (ord($str[$i]) > 127) return false; } return true; }
但我不得不问,为什么你这么关心更快?使用更可读和更容易理解的版本,只有当你知道这是一个问题时才担心优化它。
编辑:
另一个选项是mb_check_encoding:
mb_check_encoding
function isAscii($str) { return mb_check_encoding($str, 'ASCII'); }
gzszwxb42#
检查是否有任何字节大于0x7f,或任何字符大于U+007F。
nszi6y053#
function isAscii($str) { return preg_match('/^([\x00-\x7F])*$/', $str); } // doesn't accept ASCII control characters function isAsciiText($str) { return preg_match('/^([\x09\x0A\x0D\x20-\x7E])*$/', $str); }
3条答案
按热度按时间5fjcxozz1#
一个可能更快的函数是使用一个负数字符类(因为正则表达式可以在遇到第一个字符时停止,并且不需要在内部捕获任何东西):
没有正则表达式(基于我的评论){
但我不得不问,为什么你这么关心更快?使用更可读和更容易理解的版本,只有当你知道这是一个问题时才担心优化它。
编辑:
另一个选项是
mb_check_encoding
:gzszwxb42#
检查是否有任何字节大于0x7f,或任何字符大于U+007F。
nszi6y053#