如何检测非西方字符?

18

我希望在服务器端禁止某些UTF-8输入,例如东方语言,其中示例输入可能是“伊”。

但是,我仍然希望继续支持其他拉丁或“类拉丁”的字符,例如威尔士的ŵ和ŷ,因此检查Latin-1不可行

我的选择是什么?(如果是特定语言,则首选PHP)

非常感谢。


原因:许多非西方字符的浏览器支持通常缺失(例如,在不同的浏览器上,我在上面的问题中只看到一个框),因此对于显示名称这样的事情有时适当限制它,即使对于消息正文不合适。


2
你介意我问一下为什么您不想在国际化网站上允许某些语言吗? - Borealid
公平的问题。这只是表格中一个字段所必需的;网站的其余部分将支持它。 - HoboBen
2
那么你允许的字符子集是什么?它是否适用于现有的字符集?如果是这样,你可以将字符串转换为目标编码,丢弃所有无效字符。 - deceze
1
浏览器对许多非西方字符的支持经常缺失(例如,在另一个浏览器中,我只看到上面的一个框),因此对于像显示名称这样的东西,有时限制它是适当的,即使对于消息正文来说不合适。 - HoboBen
1个回答

40

只需要这样做

preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)

其中 $string 是一个 UTF-8 字符串。如果有非拉丁字符,则返回 "1";否则返回 "0"。

示例:

var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷaás??'));  //int(0)
var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷݤaás??')); //int(1)

有没有任何命名子模式的列表? - HoboBen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接