John
John

Reputation: 2501

using preg_match to detect persian (farsi) characters in string

I am trying to validate form data from server-side. my interest is that the user just fill the form by Persian characters.

I am using this code:

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

but it is not working!

here is a warning:

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

What can I do?

Upvotes: 16

Views: 9971

Answers (4)

Hamid Hassas
Hamid Hassas

Reputation: 1

function isPersianName($name) {
// بررسی می‌کند که آیا نام شامل حروف غیر فارسی (انگلیسی) است
if (preg_match('/[a-zA-Z]/', $name)) {
    return ('لطفاً نام خود را به فارسی وارد نمائید.'); // اگر حروف انگلیسی وجود داشته باشد
} else {
    return $name;
}

}

echo isPersianName('حمید حساس');

Upvotes: 0

xhdix
xhdix

Reputation: 155

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

پژگچ in 600 - 6FF range

fa only:

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

en , en-num and fa character:

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

you can set fa-numbers or arabic ي ك

Upvotes: 11

Darya
Darya

Reputation: 69

You should use this:

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

Upvotes: 5

CarpeNoctumDC
CarpeNoctumDC

Reputation: 1760

This 'should' work...

** added a ^ after the opening [ to exclude arabic/farsi characters from the match...

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

Upvotes: 15

Related Questions