如何检测字符串中的非ASCII字符?

rid*_*rid 32 php string

如果我有一个PHP字符串,如何以有效的方式确定它是否包含至少一个非ASCII字符?并且非ASCII字符,我的意思是任何不属于此表的字符,http://www.asciitable.com/,位置32 - 126包含.

因此,它不仅必须是ASCII表的一部分,而且还必须是可打印的.我想检测一个字符串,其中包含至少一个不符合这些规范的字符(不可打印的ASCII,或者完全不同的字符,例如不属于该表的Unicode字符).

Kar*_*lis 61

我发现检测列表中是否有任何字符更有用

if(preg_match('/[^\x20-\x7e]/', $string))
Run Code Online (Sandbox Code Playgroud)

  • 请记住,0x7F是删除字符,所以它需要是'/ [^\x20-\x7e] /',因为0x7e是〜,所以这在技术上并不准确. (7认同)
  • +1,对于javascript`/^ [^\x20-\x7f] + $/.test(theString)` (6认同)

Gum*_*mbo 34

您可以使用mb_detect_encoding并检查ASCII:

mb_detect_encoding($str, 'ASCII', true)
Run Code Online (Sandbox Code Playgroud)

如果包含至少一个非ASCI字符(字节值> 0x7F),则返回false$str.

  • [`mb_check_encoding`](http://php.net/manual/en/function.mb-check-encoding.php)更合适:`mb_check_encoding($ str,'ASCII')` (11认同)