-
آموزش کامل عبارات منظم(RegularExpressions) در PHP
به نام خدا
با یه جستجو در تالارها متوجه شدم که کمبود یک مقاله جمع وجور در این زمینه به زبان فارسی احساس می شود به همین دلیل تصمیم گرفتم یک آموزش کامل کار با عبارات منظم در PHP را در حد توان خود شروع کنم.
از دوستان خواهشمندم علاوه بر قوانین سایت موارد زیر را در نظر داشته باشند :
- برای نظم تاپیک از ارسال موارد غیر ضروری خودداری کنید.
- برای تشکر فقط از کلید تشکر استفاده کنید
- در صورتی که سوال دارید در تاپیک جداگانه مطرح کنید تا رسیدگی شود
- در صورت مشاهده ی اشتباه با پیغام خصوصی به بنده اطلاع دهید تا اصلاح نمایم
- بنده سعی می کنم مطالب را کامل بنویسم اما چون این مبحث بسیار گسترده است ممکن است مطالبی جا بماند که به مرور آنها را اضافه خواهم کرد البته نه با افزودن پست جدید بلکه با ویرایش پستهای قبلی انشاءالله
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
قسمت اول-کاراکتر های ویژه در عبارات منظم
فرض را بر این گذاشتم که دوستانی که این تاپیک را می خوانند می دانند عبارات منظم چیست و کاربرد آنها در کجاست.
اما مروری گذرا بر عبارات منظم :
الگو یا pattern یک عبارت منظم است که ما می خواهیم آن را در متنی جستجو کنیم و عملیات لازم را با توابع اینکار با آن انجام دهیم.
مثال: فرض کنید متنی داریم که در آن یک عدد آمده است مثلا متنی حاوی اطلاعات آب و هوای یک شهر دارم که دمای فعلی در آن با یک عدد صحیح مشخص شده است با استفاده از یک الگوی خاص و یکی از توابع کار با الگوها می خواهیم این عدد پیدا کنیم و از متن استخراج کنیم.
این نکته را هم عرض کنم ممکن است در یکی دو قسمت اول مطالب برای شما گنگ باشد هیچ نگران نباشید خودتان حتما مثالها را تست کنید و سعی کنید با دادن مقادیر مختلف کاربرد آنها را در ذهن خود تثبیت کنید.
شروع می کنیم
در کار با عبارات منظم به دو چیز نیاز داریم :
- توابع کار با عبارات منظم
- الگوها(patterns)
الگو باید بین دو کاراکتر جدا کننده قرار گیرد این کاراکترها معمولا //،## و یا @@ می باشند.
کاراکترهای جدا کننده برای توابع کار با الگو ابتدا و انتهای الگو را مشخص می کنند.
یک تعریف :
- رشته ی تهی : رشته ای که هیچ کاراکتری نداشته باشد یا به عبارتی طول آن 0 باشد.
الگو حاوی متا کاراکترها(همون کاراکترهای ویژه) و کاراکترهای عمومی است.
در زیر بخشی از کاراکترهای ویژه را به همراه توضیح مختصر مشاهده می کنید :
- . در الگو به معنای این است که هر کاراکتری می تواند ظاهر شود(فقط یک کاراکتر).
- * در الگو به این معناست که عبارت قبل از آن می تواند 0 بار یا بیشتر تکرار شود.
- + در الگو به این معناست که عبارت قبل از آن می تواند 1 بار یا بیشتر تکرار شود.
- ? در الگو به معنای این است که عبارت قبل از آن می تواند ظاهر نشود یا 1 بار ظاهر شود.
- {num} عبارت قبل از این به تعداد num باید تکرار شود نه بیشتر و نه کمتر)num یک عدد صحیح است).
- {m,n} عبارت قبل از این به تعداد حداقل m و حداکثر بار باید تکرار شود نه بیشتر و نه کمتر)n , m هردو اعداد صحیح هستند).
- () هر عبارتی بین پرانتز قرار گیرد به عنوان یک واحد حساب می شود.
- [] یک کلاس کاراکتر را مشخص می کند به این معنا که فقط یکی از کاراکتر های تعریف شده داخل آن می توانند ظاهر شوند.
- - در الگو برای مشخص کردن محدوده به کار می رود مثلا 9-0.
- ^ دو حالت می تواند داشته باشد 1.در ابتدای الگو به این معناست که عبارت مورد جستجو باید با عبارتی (کلمه،کاراکتر یا کلاس کاراکتر) که بعد از ^ می آید شروع شود.در داخل [] به این معناست که کاراکتر بعد از آن نباید ظاهر شود.
- $ در پایان الگو به این معناست که عبارت مورد جستجو باید با عبارتی(کلمه،کاراکتر یا کلاس کاراکتر) که قبل از $ می آید شروع شود.
- | یک عملگر است و به معنای یا می باشد.
چند مثال از الگو ها را با هم بررسی می کنیم:
.*
گفتیم که . یعنی هرکاراکتری می تواند ظاهر شود و * به این معناست که قبل از آن می تواند 0 یا بیشتر بار تکرار شود پس الگوی فوق یعنی "رشته ای از تمام کاراکترها با طول 0 یا بیشتر" یا به عبارت دیگر "یک رشته تهی یا رشته ای غیر تهی با طول دلخواه"
[0-9A-Z]
می دانیم - برای مشخص کردن محدوده به کار می رود و [] برای مشخص کردن اینکه فقط یک کاراکتر از کاراکترهای تعریف شده در [] ظاهر شود پس مثال بالا "یک کاراکتر از 0 تا 9 یا یکی از حروف بزرگ الفبای انگلیسی"
[a-d]
گفتیم که [] یک کلاس کاراکتر را مشخص می کند و از کاراکترهای تعریف شده برای آن فقط یکی می تواند ظاهر شود پس الگوی فوق یعنی "یک کاراکتر از کاراکترهای a تا d"
حالا بیایید کلاس کاراکتر را با * ترکیب کنیم :
[0-9]*
الگوی بالا الگوی یک "عدد صحیح با تعداد رقم 0 یا نامحدود" می باشد.
.+
فرق این الگو با الگوی اول در کاراکتر ویژه ی + می باشد پس بنا به تعریف این کاراکتر الگوی فوق یعنی "رشته ای از کاراکترها با طول حداقل 1 کاراکتر"
ترکیب این کاراکتر را با کلاس کاراکترها دیگر واضح است.
(ab)+
عبارت داخل پرانتز یک واحد محسوب می شود پس الگوی فوق یعنی "رشته ای از تکرار عبارت ab که حداقل آن یک ab است"
[^Ff]
^ در داخل [] به کار رفته به این معنا که "هر کاراکتری بجز F و f"
^(hello)(.*)(welcome)$
الگوی فوق به این معناست :"1-رشته باید با hello شروع شده 2-سپس یک رشته با هر ترکیبی می تواند ظاهر شود3-و در نهایت رشته باید به welcome ختم شود"
salam{1}
فقط رشته ی salam را می پذیرد.
go{1,100}gle
حرف o بین 1 تا 100 بار می تواند ظاهر شود.
(H|B)ook
می دانیم | به معنای "یا" می باشد پس یکی از دو کلمه ی Hook یا Book پذیرفته می شود.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) درPHP-قسمت دوم-توابع عبارات منظم
قسمت دوم-توابع عبارات منظم
به طور خلاصه 4 تابع برای کار با عبارات منظم داریم:
- preg_split - یک رشته را با استفاده از یک الگوی عبارت منظم تکه تکه می کند و حاصل را به صورت یک آرایه بازگشت می دهد.
- preg_match - الگوی عبارت منظم را در رشته جستجو می کند.
- preg_replace - الگوی عبارت منظم را در یک رشته جستجو کرده و آن را متنی که به آن داده می شود جابجا می کند.
- preg_grep - الگوی عبارت منظم را در تمام عناصر یک آرایه جستجو کرده و موارد یافت شده را به صورت یک آرایه بازگشت می دهد.
در ادامه برای هر کدام از توابع بالا یک مثال ذکر می کنیم :
مثال1 :
print_r(preg_split("@\s@", "Jane\tKate\nLucy Marion"));
خروجی :
Array
(
[0] => Jane
[1] => Kate
[2] => Lucy
[3] => Marion
)
توضیح :
در رشته ی مورد نظر 4 اسم داریم که با فاصله از هم جدا شده اند.
s\ یک کلاس کاراکتر ویژه است که به جای کاراکتر جدا کننده از آن در الگو استفاده می کنیم.
نکته : کاراکترهای ویژه(متا کاراکترها) برای راحتی کار از قبل تعریف شده اند چند مورد از آنها را در زیر می بینیم:
- s\ هر نوع کاراکتر فاصله را مشخص می کند
- S\ هر نوع کاراکتر بجز کاراکتر فاصله را مشخص می کند
- d\ برای تشخیص اعداد دسیمال استفاده می شود
- D\ شناسایی اعداد غیر دسیمال
- uXXXX\ یک کاراکتر یونیکد که XXXX کد کاراکتر یونیکد می باشد را مشخص می کند
در این مثال الگو را بین دو @ قرار دادیم، همانطور که در قسمت قبل گفته شد می توان از // یا ## هم استفاده کرد در مثالهای بعد از آنها هم استفاده می کنیم.
مثال 2 :
echo preg_match("#[a-z]#", "s");
خروجی :
1
همانطور که در قسمت اول گفته شد [] یک کلاس کاراکتر است به این معنا که فقط یکی از کاراکتر های داخل آن پذیرفته می شود.الگوی مثال بالا به این معناست که اگر رشته به صورت یکی از کاراکتر های a تا z بود پذیرفته شود که رشته مورد نظر ما s می باشد پس پذیرفته می شود و تابع مقدار 1 را بازگشت می دهد.
مثال 3 :
echo preg_replace("/Jane/","Beky","I saw Jane. Jane was smart.");
خروجی:
I saw Beky. Beky was smart.
در مثال بالا از هیچکدام ا کاراکترهای ویژه استفاده نکردیم پس فقط متن داده شده جستجو و جایگزین می شود.
مثال 4 :
print_r(preg_grep("#Jane#", array("Jane", "jane", "Joan", "JANE")));
خروجی:
Array
(
[0] => Jane
)
اگر دقت کنید در مثال بالا دستور استفاده شده به صورت پیشفرض حساس به متن است و بزرگی و کوچی حروف اهمیت دارد.
مثال 5 :
print_r(preg_grep("#Jane#i", array("Jane", "jane", "Joan", "JANE")));
خروجی :
Array
(
[0] => Jane
[1] => jane
[3] => JANE
)
برای اینکه حساس به متن نباشد بعد از الگو از کاراکتر i استفاده کردیم.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
ممنون بابت ایجاد این تایپیک،
اگر ممکنه یه REgEXبرای چک حتما فارسی بودن رشته ورودی بگید. ممنون.
ضمناً اینجا هم یه اموزش regExهست که فکر میکنم مفید باشه:
http://www.barnamenevis.org/sh...d.php?p=993290
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
h.alizadeh
ممنون از لینکی که گذاشتید
باید با یونیکد آشنا باشید مثال برای فارسی بودن(میشه خلاصش کرد اما این کامله حتی اعراب و حروف الفبای عربی مثل ء هم ساپورت می کنه) :
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",'دوست خوب');
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP-قسمت سوم الگو های تودرتو
قسمت سوم - الگوهای تودرتو
همانطور که گفته شد عبارت داخل پرانتز به عنوان یک واحد به حساب می آید برای مثال شما می توانید در داخل پرانتز یک الگو تعریف کنید و بر حسب نیاز خود آن را در الگوی کلی به کار ببرید.
به مثالهای زیر توجه کنید :
echo preg_match("/book(shelf|worm)?$/", "book");
خروجی:
1
مثال2:
echo preg_match("/book(shelf|worm)?$/", "bookshelf");
خروجی:
1
مثال3:
echo preg_match("/book(shelf|worm)?$/", "bookworm");
خروجی:
1
مثال4:
echo preg_match("/book(shelf|worm)?$/", "bookstore");
خروجی:
0
اگر با قواعد اولیه آشنا باشید یا پستهای قبلی را مطالعه کرده باشید تحلیل مثالهای بالا بسیار ساده می باشد.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
سلا به همگی!
من تست گرفتم منتها تست درست :لبخندساده: و جواب کاملا درست گرفتم.
مشکل اکثریت دوستان اینه کا کپی - پیست میکنن کد بالایی و و تو کامپایلراشون جوواب 0 میگیرن
اما خو بهتر یکبارم که شده این کد و بریزند تو notepad و اونو با encoding --- utf ذخیره کنن و نتیجه واقعی و ببینند
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
این داره نتیجه 1 میده !!!!!!
فکر کنم این پترنی که اقای طهماسبی نوشتند تعداد کمی از حروف رو پشتیبانی میکنه
حتما شما یه چیزه دیگرو مقایشه کردید
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
binyaft
این داره نتیجه 1 میده !!!!!!
فکر کنم این پترنی که اقای طهماسبی نوشتند تعداد کمی از حروف رو پشتیبانی میکنه
حتما شما یه چیزه دیگرو مقایشه کردید
منم به هر حرفی مقایسه کردم 0 میده بیرون
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
من از Xampp استفاده میکنم الان هم داره 1 رو نشون میده
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
binyaft
من از Xampp استفاده میکنم الان هم داره 1 رو نشون میده
من هم از Xampp استفاده میکنم و 0 نشون میده :لبخند:
سیستم عاملتون چیه؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
binyaft
Xampp رو XP هست
مال من سون هست
نمیدونم چی بگم
بقیه دوستان هم امتحان کنند
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
آقا جان عزیزم قصد به چالش کشوندن نداشتم !! :لبخند::لبخند::لبخند::لبخند:
اما من از zend استفاده میکنم این 0 نشون میده به جز یک مورد اون ورودی خالی که یک نشون میده
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
برای من 1 میده.
من یه احتمالی میدم که مشکل encoding داشته باشید.
اصولا این کد باید جواب بده. من در CharacterMap ویندوز چک کردم و تمام کاراکترهای فارسی رو پوشش میده.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
من خیلی از کاراکترهارو چک کردم، مشکلی نداشت.
--------------------
من خیلی از کاراکترهارو چک کردم، مشکلی نداشت و داره درست کار می کنه.
با سیستم عامل 7 روی wamp
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
این کد قابلیت انتقال نداره
به دلیلی که نمیدونم چیه، هر جا یک چیز نمایش میده
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
برای من 1 نشون میده ویندوز سون xampp
برای اونایی که 0 برمیگردونه دونه دونه کاکتر اصلی رو چک کنن ببینن در کدوم یکیشون ارورمیده. بعد با کم زیاد کردن unicode اونو پیدا کنن.و نتیجه رو اینجا بزارن
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
من این عبارت رو زدم
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",'دوست خوب');
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",'د');
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",'ا');
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",'ن');
نتیجه شد
0000
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
من همچنان مشکل encode رو دلیل این مشکل میدونم.
این کد را وارد کنید:
$str = "دوست خوب";
echo 'Encoding is: <b>' . mb_detect_encoding($str) . "</b> and it is ";
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",$str)? '<b>valid</b>' : '<b>invalid</b>';
//
خروجی باید این باشد:
Encoding is: UTF-8 and it is valid
امیدوارم مشکل حل بشه.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
به دلایلی نامعلوم مشکل برای من پیش اومد و مقدار 0 داد .
با کمی پیگیری فکر کنم مشکل رو حل کردم
1.encoding فایل خود را به utf8 تبدیل کنید
2.عبارت زیر رو داخل عبارت خود قرار دهید
\x{003F}
کامل:
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}\x{003F}0-9]*$#u",'دوست خوب');
بهتره از گزینه دو استفاده بشه.
و نتیجه رو اینجا بزارید.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
پس حدث من در مورد encoding درست بود.
فقط دلیل اضافه کردن اون کد رو متوجه نشدم. اون کد معادل علامت سوال انگلیسی است.
چه دلیلی برای درج اون وجود داره؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
$ M 3 H R D A D $
این که در هر صورت جوابش 0 میشه !
درست تست نکردید
می توانید از یکی از تست کننده های آنلاین استفاده کنید :
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
sama01
من همچنان مشکل encode رو دلیل این مشکل میدونم.
این کد را وارد کنید:
$str = "دوست خوب";
echo 'Encoding is: <b>' . mb_detect_encoding($str) . "</b> and it is ";
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]*$#u",$str)? '<b>valid</b>' : '<b>invalid</b>';
//
خروجی باید این باشد:
Encoding is: UTF-8 and it is valid
امیدوارم مشکل حل بشه.
ولی خروجی این نیست
این هست برای من
Encoding is: UTF-8 and it is invalid
این کد چون قابلیت انتقال نداره، گزینه خوبی برای استفاده نیست
--------------------
نقل قول:
نوشته شده توسط
mohmadd
به دلایلی نامعلوم مشکل برای من پیش اومد و مقدار 0 داد .
با کمی پیگیری فکر کنم مشکل رو حل کردم
1.encoding فایل خود را به utf8 تبدیل کنید
2.عبارت زیر رو داخل عبارت خود قرار دهید
\x{003F}
کامل:
echo preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}\x{003F}0-9]*$#u",'دوست خوب');
بهتره از گزینه دو استفاده بشه.
و نتیجه رو اینجا بزارید.
من همچنان 0 هستم
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
bestirani2
ولی خروجی این نیست
این هست برای من
Encoding is: UTF-8 and it is invalid
این کد چون قابلیت انتقال نداره، گزینه خوبی برای استفاده نیست
--------------------
من همچنان 0 هستم
مطمئن باشید کد مشکل ندارد اگر با عبارات منظم و همچنین کدهای یونیکد آشنا باشید این مطلب را تایید می کنید
همانطور که گفتممی توانید از تست کننده های آنلاین استفاده کنید که در شرایط کاملا استاندارد عبارت منظم مورد نظر را تست می کنند می توانید از لینک زیر استفاده کنید :
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
صابر طهماسبی
مطمئن باشید کد مشکل ندارد اگر با عبارات منظم و همچنین کدهای یونیکد آشنا باشید این مطلب را تایید می کنید
همانطور که گفتممی توانید از تست کننده های آنلاین استفاده کنید که در شرایط کاملا استاندارد عبارت منظم مورد نظر را تست می کنند می توانید از لینک زیر استفاده کنید :
این که کد مشکل نداره درسته
ولی من در مورد قابلیت حمل دارم صحبت میکنم
نه درستی کد
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
صابر طهماسبی
مطمئن باشید کد مشکل ندارد اگر با عبارات منظم و همچنین کدهای یونیکد آشنا باشید این مطلب را تایید می کنید
همانطور که گفتممی توانید از تست کننده های آنلاین استفاده کنید که در شرایط کاملا استاندارد عبارت منظم مورد نظر را تست می کنند می توانید از لینک زیر استفاده کنید :
کد هیچ مشکلی نداره .
نقل قول:
من همچنان 0 هستم
برای من که جواب میده .
نکته جالبی که پیدا کردم اینه که با یونیکدی که گذاشتم تمام کلمات فارسی در ANSI
match میشن
شما اینو تست کنید و نتیجه رو بدید تا ببینم چی میشه
$str = 'دوست عزيز';
for ($i = 0; $i < strlen($str); $i++)
{
echo ord(substr($str, $i, $i + 1)) . '<br />';
}
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
mohmadd
کد هیچ مشکلی نداره .
برای من که جواب میده .
نکته جالبی که پیدا کردم اینه که با یونیکدی که گذاشتم تمام کلمات فارسی در ANSI
match میشن
شما اینو تست کنید و نتیجه رو بدید تا ببینم چی میشه
$str = 'دوست عزيز';
for ($i = 0; $i < strlen($str); $i++)
{
echo ord(substr($str, $i, $i + 1)) . '<br />';
}
207
230
211
202
32
218
210
237
210
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
پس حدث من در مورد encoding درست بود.
فقط دلیل اضافه کردن اون کد رو متوجه نشدم. اون کد معادل علامت سوال انگلیسی است.
چه دلیلی برای درج اون وجود داره؟
چون در Ansi کارکترهای unicode ذخیره نمیشن ,اما اگه ذخیره بشن ..... به چی تبدیل میشن ؟ loool
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نتیجه کار بنده :
1.روش دوم در پست 22 کاملا اشتباهه .. چون همه کاکتر ها به علامت سئوال تبدیل میشن و بعد match میشن که در هر حالت 1 داده میشه
اگه مقدار پارمتر دوم unicode باشه برای تست اون باید encoding صفحه utf8 باشه .
اما در حالت کلی ما از form استفاه میکنیم. کاربر میاد اسمشو مینویسه و بعد submit رو میزنه
اطلاعات پست میشن و بررسی میشه :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="http://127.0.0.1/newtest.php" method="post">
<input type="text" name="str" />
<input type="submit" name="sub" />
</form>
<?php
function test($str)
{
return preg_match("#^[\s\x{0621}-\x{063A}\x{0640}-\x{0691}\x{0698}-\x{06D2}0-9]+$#u",$str);
}
echo test($_REQUEST['str']);
?>
--------------------
<form action="http://127.0.0.1/newtest.php" method="post">
<input type="text" name="str" />
<input type="submit" name="sub" />
</form>
<?php
echo $_REQUEST['str'];
?>
در این حالت وقتی به page source نگاه میکنم به این حالته :
http://imgdl.ir/images/9261.jpg
میشه در مورد این توضیح بدید ؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
مشکل همان unicode هست.
صفحات شما به صورت utf-8 ذخیره نشدهاند.
تنها دلیل این مشکل این هست.
صفحات خود را با encoding درست ذخیره کنید.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
در مورد Encoding باید charset را به utf-8 گذاشت که match بشن.
در مورد سئوالم فقط میخوام بدونم اسم اینا چیه ؟؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
اینها کدهای یک کاراکتر utf-8 هستند که از ascii بیرون هستند.
اگر دقت کنید اعداد آن مشابه اعدادی است در regex نوشتیم.
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
خوب مثلا من بخوام در موردش سرچ کنم اسمش چیه ؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
هر چیزی تو مایه های uft8 encoding میتونه مطالب خوبی بیاره.
این چند لینک را ببینید:
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
bestirani2
این که کد مشکل نداره درسته
ولی من در مورد قابلیت حمل دارم صحبت میکنم
نه درستی کد
قابلیت حمل به این معناست که کد در سیستم های مختلف و شرایط یکسان درست کار کنه
نه اینکه مثلا کد یک برنامه که تحت دات نت نوشته شده ببرید تو غیر دات نت!خوب معلومه کار نمی کنه چون شرایط اجرا براش مهیا نیست وقتی هم دارید با فارسی کار می کنید باید استاندارد یونیکد را در صفحات رعایت کنید.
دلیل عدم اجرای این کد برای شما در encoding فایلها و صفحات است
شرایط استاندارد کار با متون فارسی تحت وب به صورت زیر است :
- فایلها به صورت utf8 ذخیره شوند
- encoding صفحه در تگ meta روی utf-8 تنظیم شود
- کانکشن بانک اطلاعاتی شما utf-8 باشد
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
صابر طهماسبی
قابلیت حمل به این معناست که کد در سیستم های مختلف و
شرایط یکسان درست کار کنه
نه اینکه مثلا کد یک برنامه که تحت دات نت نوشته شده ببرید تو غیر دات نت!خوب معلومه کار نمی کنه چون شرایط اجرا براش مهیا نیست وقتی هم دارید با فارسی کار می کنید باید استاندارد یونیکد را در صفحات رعایت کنید.
دلیل عدم اجرای این کد برای شما در encoding فایلها و صفحات است
شرایط استاندارد کار با متون فارسی تحت وب به صورت زیر است :
- فایلها به صورت utf8 ذخیره شوند
- encoding صفحه در تگ meta روی utf-8 تنظیم شود
- کانکشن بانک اطلاعاتی شما utf-8 باشد
این حرف وقی صحیح هست که من اطلاعات رو از یک فرم بگیرم و از بانک اطلاعاتی بخوام
این کد روی 5 تا سرور تست کردم که 2 تاشون جواب صحیح نمیداد و 3 تاشون میداد
$str = 'دوست عزيز';
for ($i = 0; $i < strlen($str); $i++)
{
echo ord(substr($str, $i, $i + 1)) . '<br />';
}
برای شما چی رو نشون میده؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
bestirani2
این حرف وقی صحیح هست که من اطلاعات رو از یک فرم بگیرم و از بانک اطلاعاتی بخوام
بنده شرایط استاندارد کار با متون فارسی را در حالت کلی گفتم که فقط موارد 1و2 به مورد شما ربط دارد
نقل قول:
نوشته شده توسط
bestirani2
$str = 'دوست عزيز';
for ($i = 0; $i < strlen($str); $i++)
{
echo ord(substr($str, $i, $i + 1)) . '<br />';
}
خوب این کد چه ربطی به عبارات منظمی که بنده نوشتم داره؟
-
نقل قول: آموزش کامل عبارات منظم(RegularExpressions) در PHP
نقل قول:
نوشته شده توسط
صابر طهماسبی
بنده شرایط استاندارد کار با متون فارسی را در حالت کلی گفتم که فقط موارد 1و2 به مورد شما ربط دارد
خوب این کد چه ربطی به عبارات منظمی که بنده نوشتم داره؟
می خواهم
ببینم چه اعدادی میده
اگر مربوط به utf-8 باشه باید اعداد متفاوتی با مال من بهتون بده