preg_match不检测阿拉伯字符

时间:2017-09-24 20:32:04

标签: php regex

此代码无效:

MainActivity.java

结果:

@Override 
public void onBackPressed() { 

} 

另外 $text = 'بيتر' // Arabic if (preg_match('^[\u0621-\u064A\u0660-\u0669 ]+$', $text)) echo "Text has some arabic/hebrew characters."; else echo "Text doesnt have arabic/hebrew characters."; 无效。

2 个答案:

答案 0 :(得分:0)

一些更多的投票答案似乎不适用于我自己的PHP,你自己的版本是相同的。

我发现这个正则表达式适用于您的示例文本:

if (preg_match("/[א-ת]/", $text))

答案 1 :(得分:0)

我认为你必须使用//u Unicode 正则表达式标志来匹配这些字符。

如果可能的话,你永远不想把Unicode文字文本放在一个类中 代码源可以用UTF-16生成,这将打开可能性 在课堂内的代理人,这是不,不。

使用Unicode正则表达式标志时,它会将目标字符串转换为 Unicode字符串,因为正则表达式和目标必须处于相同的模式。

真正需要找到的是第一封阿拉伯语或希伯来语字母,所以你的 regex可以使用Script属性语法\p{}或Unicode字符语法\x{}作为范围。

这两种方式是:

if (preg_match( '/[\p{Arabic}\p{Hebrew}]/u', $text))

http://sandbox.onlinephpfunctions.com/code/c6eb694ae6a7e4d1e8c4f2ead4777f9d19f37105

if (preg_match('/[\x{591}-\x{5C7}\x{5D0}-\x{5EA}\x{5F0}-\x{5F4}\x{600}-\x{604}\x{606}-\x{60B}\x{60D}-\x{61A}\x{61E}\x{620}-\x{63F}\x{641}-\x{64A}\x{656}-\x{66F}\x{671}-\x{6DC}\x{6DE}-\x{6FF}\x{750}-\x{77F}\x{8A0}-\x{8B4}\x{8B6}-\x{8BD}\x{8D4}-\x{8E1}\x{8E3}-\x{8FF}\x{FB1D}-\x{FB36}\x{FB38}-\x{FB3C}\x{FB3E}\x{FB40}-\x{FB41}\x{FB43}-\x{FB44}\x{FB46}-\x{FBC1}\x{FBD3}-\x{FD3D}\x{FD50}-\x{FD8F}\x{FD92}-\x{FDC7}\x{FDF0}-\x{FDFD}\x{FE70}-\x{FE74}\x{FE76}-\x{FEFC}\x{10E60}-\x{10E7E}\x{1EE00}-\x{1EE03}\x{1EE05}-\x{1EE1F}\x{1EE21}-\x{1EE22}\x{1EE24}\x{1EE27}\x{1EE29}-\x{1EE32}\x{1EE34}-\x{1EE37}\x{1EE39}\x{1EE3B}\x{1EE42}\x{1EE47}\x{1EE49}\x{1EE4B}\x{1EE4D}-\x{1EE4F}\x{1EE51}-\x{1EE52}\x{1EE54}\x{1EE57}\x{1EE59}\x{1EE5B}\x{1EE5D}\x{1EE5F}\x{1EE61}-\x{1EE62}\x{1EE64}\x{1EE67}-\x{1EE6A}\x{1EE6C}-\x{1EE72}\x{1EE74}-\x{1EE77}\x{1EE79}-\x{1EE7C}\x{1EE7E}\x{1EE80}-\x{1EE89}\x{1EE8B}-\x{1EE9B}\x{1EEA1}-\x{1EEA3}\x{1EEA5}-\x{1EEA9}\x{1EEAB}-\x{1EEBB}\x{1EEF0}-\x{1EEF1}]/u', $text))

http://sandbox.onlinephpfunctions.com/code/d7eb3834f1d25a5f53261f016a7b849db9aa5ac5