我已经在这里搜索并找到了与此帖子相关的类似帖子,但我还没有找到解决方案。
我试过这个:
$text = "الحمد لله رب العالمين hello";
echo $is_arabic = preg_match('/\p{Arabic}/u', $text);
我添加了 unicode 标志,但如果我添加任何英文字符,它会返回 true !有什么解决办法吗?
有什么想法吗?
提前致谢
使用 unicode 标志:
$text = "الحمد لله رب العالمين";
echo $is_arabic = preg_match('/\p{Arabic}/u', $text);
here __^
如果您只想匹配阿拉伯语,您应该这样做:
echo $is_arabic = preg_match('/^[\s\p{Arabic}]+$/u', $text);
更新:我发现我对不支持的类显然是错误的(尽管文档中说“PCRE 不支持“Greek”或“InMusicalSymbols”等扩展属性”但http://php.net/manual上的评论/en/regexp.reference.unicode.php#102756说它们受支持),所以我猜 M42 是更好的答案。但是,它们可以通过以下范围完成:
$text = "الحمد لله رب العالمين";
echo $is_arabic =
preg_match('/^[\s\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{08A0}-\x{08FF}\x{FB50}-\x{FDFF}\x{FE70}-\x{FEFF}\x{10E60}\x{10E60}—\x{10E7F}\x{1EE00}—\x{1EEFF}]+$/u', $text);