PDA

View Full Version : نیاز به فرمول رگولار اکسپرشن



parsbin
سه شنبه 17 مرداد 1391, 14:38 عصر
برای یک تکه دیگه برنامه که کار ساخت pdf رو انجام میده.مشکلم اینه که اعدادی که با کارکترهای فارسی نوشته میشند رو برعکس چاپ میکنه
راه حلم اینه که در سورس تمام اعداد فارسی رو گیر بیارم و reverse اشون کنم

http://1.0.0.img98.net/out.php/i422110_pdf-fa.png

نیاز به فرمول رگولار اکسپرشنی دارم که تنها اعداد فارسی رو بهم برگردونه فقط اونهایی که حداقل دو رقم فارسی دارن تا با تابع زیر درستشون کنم
برنامه برای حروف انگلیسی درست کار میکنه.
جای 1-9 باید چی بزارم تا اعداد فارسی رو ساپورت کنه


function revers_nums($str){
return strrev($str[0]);
}
$xx13 = preg_replace_callback("/((1-9){2,10})/","revers_nums",$xx13);

imanitc
چهارشنبه 18 مرداد 1391, 12:11 عصر
function farsi_number($m)
{
$m=str_replace("1","۱",$m);
$m=str_replace("2","۲",$m);
$m=str_replace("3","۳",$m);
$m=str_replace("4","۴",$m);
$m=str_replace("5","۵",$m);
$m=str_replace("6","۶",$m);
$m=str_replace("7","۷",$m);
$m=str_replace("8","۸",$m);
$m=str_replace("9","۹",$m);
$m=str_replace("0","۰",$m);
return $m;
}//farsi_number

parsbin
پنج شنبه 19 مرداد 1391, 10:33 صبح
متشکر
ولی نمیخوام اعداد رو جایگزین کنم
میخوام اعداد فارسی رو با رگولاراکسپرشن به تابعی که نوشتم برای reverse کردن ارسال کنم.
یعنی بازه اعداد فارسی با رگولار اکسپرشن رو میخوام

eshpilen
پنج شنبه 19 مرداد 1391, 21:45 عصر
<?php

header('Content-Type: text/html; charset=utf-8');

$re='/[\x{06F0}-\x{06F9}]{2,}/u';

$str='xx۳۳rrf 456 ۷۹۱';

preg_match_all($re, $str, $out);

var_dump($out);

?>

parsbin
دوشنبه 23 مرداد 1391, 13:47 عصر
کارکترها بصورت بهم ریخته نشون داده میشن
خروجی:

xx�۳�rrf 456 �۹۷�ksjdcjh�۹۱۹
کدم:


header('Content-Type: text/html; charset=utf-8');
$re='/[\x{06F0}-\x{06F9}]{2,}/u';
$str='xx۳۳rrf 456 ۷۹۱ksjdcjh۹۱۹۱';
function func($string){
return strrev($string[0]);
}
echo preg_replace_callback($re, 'func' , $str);

parsbin
دوشنبه 23 مرداد 1391, 13:55 عصر
مشکل از تابع strrev هستش ظاهرا
برای برعکس کردن حروف فارسی چطور باید عمل کرد؟

eAmin
دوشنبه 23 مرداد 1391, 22:39 عصر
http://stackoverflow.com/questions/434250/how-to-reverse-a-unicode-string

parsbin
سه شنبه 24 مرداد 1391, 09:41 صبح
متشکر
اعداد فارسی در دو رنج متفاوت هستند
0660 تا 0669
06f0 تا 06f9
چطور میشه در فرمول رگولار اکسپرشن دو رنج متفاوت از کارکترها رو به preg_match داد؟

eAmin
سه شنبه 24 مرداد 1391, 22:29 عصر
یه رنج مربوط به اعداد عربی هست و رنج دیگری برای اعداد فارسی که در پست eshpilen هم مشاهده کردید. اگر بخواید هر دو رنج رو همزمان استفاده کنید میتونید این دو رو کنار هم قرار بدید.


$re = '/[\x{06F0}-\x{06F9}\x{0660}-\x{0669}]{2,}/u';

رضا قربانی
یک شنبه 05 شهریور 1391, 19:20 عصر
البته از توابع جلالی هم می تونید استفاده کنید. jdf