使用 preg_match 在字符串中检测波斯语(Farsi)字符。

16

我想在服务器端验证表单数据。我希望用户只使用波斯字符填写表单。

我正在使用以下代码:

$name=trim($_POST['name']);
$name= mysql_real_escape_string($name);
if (preg_match('/^[\u0600-\u06FF]+$/',str_replace("\\\\","",$name))){$err.= "Please use Persian characters!";}

但它没有起作用!

这里有一个警告:

Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset 3 in C:\xampp\htdocs\site\form.php on line 38

我能做些什么?

3个回答

15

这个代码“应该”可以正常工作...

在开头的 [ 后面添加了 ^ 以排除匹配阿拉伯语/波斯语字符...

if (preg_match('/^[^\x{600}-\x{6FF}]+$/u', str_replace("\\\\","",$name)))

11

http://utf8-chartable.de/unicode-utf8-table.pl?start=1536&number=1024&utf8=0x&addlinks=1&htmlent=1

在Unicode编码的600-6FF范围内,存在字符 پژگچ。

仅fa:

preg_match('/^[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ\s]+$/u', $input);

en,en-num 和 fa 字符:

 preg_match('/^([a-zA-Z0-9 پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ])+$/u', $input);

你可以设置fa-numbers或阿拉伯数字 ي ك


5
你应该使用这个:
if(preg_match("/^[آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی]/", $_POST['name']))

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