img

عبارات باقاعده در زبان‌های برنامه نویسی : PHP و وب

/
/
/

ابتدا محیط PHP را معرفی کنیم و سپس سراغ عبارات باقاعده برویم. این توضیح پایه‌ای؛ حتی برای استفاده کسانی‌که حرفه‌ای نیستند نیز مناسب خواهد بود. حتی اگر به PHPعلاقه ندارید، این اصطلاحات شما را علاقه‌مند می‌کنند.
ببینیم PHP مخفف چیست.
قبلا مخفف «Personal Home Page» بود. اما اکنون با
PHP: Hypertext Preprocessor
جایگزین شده است. PHP توسط رسموس لردورف در سال ۱۹۹۴ ایجاد شد و اکنون تیم توسعه PHP، مسئول اجرای ارجاعات و پشتیبانی است. مفسرِ استاندارد PHP یک نرم‌افزار رایگان و تحت لیسانس PHP است. PHP می‌تواند یک زبان برنامه‌نویسی چندهدفه و عمومی باشد اما عمدتا برای ایجاد صفحات وب به‌عنوان یک زبان کدنویسی مکمل و مهم کاربرد دارد. آخرین نسخه آن ۷٫۱ است که در دسامبر ۲۰۱۶ منتشر شد.

کدهای نسخه مستقل PHP
PHP عمدتا کدنویسی مکمل است. اکثر اوقات کدهای آن را جایگذاری شده درون HTML می‌بینید. مطمئنم که همگی راجع به

HTML(Hypertext Markup Language)

شنیده اید، که در ساخت صفحات وب کاربرد دارد. حتی اگر در HTML کاملا مبتدی باشید، جای نگرانی نیست. شما هیچ مهارت خاصی برای فهم اصطلاحات آن در این مقاله، نیاز ندارید. بااینکه PHP و HTML همیشه در کنار یکدیگرند، اما می‌توانید از کدهای PHP به‌صورت مستقل و آفلاین استفاده کنید، اما کمی عجیب است که از PHP برای ساخت اپلیکیشنی استفاده کنید که آفلاین است.
اولین کد PHP که می‌خواهیم اجرا کنیم، کدی مستقل با نام first.php و به‌صورت زیر است:

<?php
echo ‘I don\’t depend on HTML always’;
?>

 

ابتدا در ترمینال، فرمان php -f را اجرا کنید. این کد و تمام کدهای دیگر PHP و HTML از آدرس

opensourceforu.com/article_source_code/October17PHP.zip

قابل دانلود هستند. هم‌چنین می‌توان کدهای PHP را اجرایی کرد. به کد تغییریافته زیر با نام second.php توجه کنید:

#!/usr/bin/php
<?php
echo ‘I don\’t depend on HTML always’;
?>

برای اجرای آن ابتدا فرمان ./second.php را در ترمینال اجرا کنید. اما قبل از آن مطمئن شوید که

اجراکننده PHP را در سیستم دارید. شاید بعضی اوقات، php اجرایی در دایرکتوری /usr/bin نباشد. در این‌صورت مسیر آن را بیابید و خط #!/usr/bin/php را با #!/YOUR_PATH_TO_PHP/php جایگزین کنید.هم‌چنین مطمئن باشید که اجازه اجرا شدن به second.php را صادر کرده‌اید. شکل۱، نتیجه اجرای این دو کد را نشان می‌دهد.

 

کد «سلام دنیا « در PHP
در تمام این سری مقالات، زبان‌های مختلف برنامه‌نویسی را شرح داده‌ام اما هیچ وقت فرصت نشد برنامه «سلام دنیا» را بررسی کنم. اینجا کد مربوطه در زبان PHP و ادغام شده با HTML با نام hello.php را داریم:

<html>
<head>
<title>Hello World Script PHP</title>
</head>
<body>
<?php
echo ‘<b> Hello World </b>’;
?>
</body>
</html>

 

عبارات باقاعده در زبان‌های برنامه نویسی : PHP و وب

اما برای اجرا این کد، به یک وب سرور مثل آپاچی نیاز دارید. روی سیستم من XAMPP نصب است که کتابخانه رایگان و اُپن سورس و حاوی سرور Apache HTTP و دیتابیس MariaDB است.
هم‌چنین می‌تواند کدهای PHP و Perlرا تفسیر کند. مطمئن شوید با استفاده از XAMPP یا کتابخانه‌ای مشابه آن که برمبنای LAMP باشد، سرور Apache HTTP را روی سیستم خود دارید. از حالا فرض می‌کنیم که همه شما XAMPP را دارید. حتی اگر از یک سرور وب دیگر استفاده می‌کنید، بر نتایج کدهای PHP اثرگذار نخواهد بود. فقط مطمئن باشید که می‌دانید چگونه باید کدهای PHP را با سرور وب خود اجرا ‌کنید.
حالا اگر XAMPP را روی سیستم دارید، فرمان

sudo /opt/ lampp/lampp start

را برای فعال کردن آن در ترمینال اجرا کنید. مطمئنا برای استفاده از آن به اجازه root احتیاج دارید. بعد از آن، مرورگر را باز کرده و در نوار آدرس، localhost را تایپ کنید. اگر XAMPP فعال باشد، صفحه خوش‌آمدگویی آن را می‌بینید. برای اجرای کد hello.php، آن را در دایرکتوری /opt/lampp/htdocs کپی کنید.
تمام کدهای ذکرشده در این مقاله به جز first.php و second.php، باید در این دایرکتوری کپی شوند زیرا برای پردازش آن‌ها به سرور وب احتیاج است. اما برای دو کد ذکر شده نیازی به آن نیست زیرا جزء کدهای مستقل هستند و از هر جایی قابل اجرا می‌باشند. حالا در نوار آدرس، localhost/hello.php را تایپ کنید. می‌نید که مرورگر عبارت ‘Hello World’ را نمایش می‌دهد. عکس دوم نمایانگر نتیجه این عمل در مرورگر فایرفاکس است.
حال بیایید کد «سلام دنیا» را با جزئیات بررسی کنیم. اکثر تگ‌های HTML مثل

<html>, <head>, <title>, <body>

خودتوصیف کننده هستند، پس بیایید نگران آن‌ها نباشیم. تفسیرگر PHP، قسمت‌های مربوط به PHP را با شروع از بازگشایی تگ <?php و اتمام با تگ پایان‌دهنده ?> تجزیه می‌کند. می‌توان جمله‌ها را با ؛ از هم جدا کرد.

PHP، ‘echo ‘<b> Hello World </b>’

نتیجه

‘<b>Hello World </b>’

را به بدنه کد HTML متصل می‌کند. حالا یک مرورگر پردازش را با تفسیر تگ <b> ادامه می‌دهد که مسئول بولد کردن است. به همین دلیل است که پیغام نمایش داده شده در مرورگر بولد است.

 

عبارات باقاعده در PHP
حال که می‎دانیم چگونه یک سرور را تنظیم و کدهای PHP را اجرا کنیم، وقت توضیح اصطلاحات است. سه دسته توابع برای انتخاب در PHP وجود دارد، preg ، mb_ereg و ereg. از میان این سه، فقط یک دسته را به تفصیل شرح می‌دهیم که برای پردازش عبارات باقاعده استفاده می‌شود، preg. دلایل خوبی برای استفاده از preg وجود دارد. اول از همه اینکه بر اساس PCRE است.
در دو مقاله اول، آن را که مخفف (عبارات باقاعده همگام با پِرل ) است، توضیح داده ایم. آن مقالات، پایتون و پرل را تحت پوشش قرار دادند که هر دو از عبارات باقاعده به سبک PCRE استفاده می‌کنند.
بنابراین، عاقلانه است که از این سبک استفاده کنید، زیرا دیگر لازم نیست دستورات مربوط به عبارات باقاعده قابل استفاده در PHP را شرح دهیم.
توابع mb_ereg پیچیده ترند و زمانی قابل استفاده‌اند که دسته‌های کاراکتری چند-بایتی را پردازش می‌کنیم. ما فقط حین پردازش زبان‌های کره ای، ژاپنی یا چینی که شامل کاراکترهای متعددی هستند با پردازش چندبایتی روبرو می‌شویم.
به‌علاوه، برخلاف بسیاری از زبان‌های دیگر که از الفبایی با تعداد مشخصی از کاراکترها استفاده می‌کنند، این زبان‌ها، حاوی هزاران لوگوگرام برای نمایش کلمات مختلف هستند.
به اصل مطلب برگردیم. نیازی نیست یادگیرنده‌ها را با شرح mb_ereg که در واقع هیچ مزیت واقعی ندارند، تحت فشار قرار دهیم. و چه چیزی باعث افت کیفیت توابع ereg است؟ آن‌ها قدیمی‌ترین مجموعه توابع هستند که از PHP نسخه ۵٫۳ به این‌طرف دیگر استفاده نشدند.
توابع اصلی ارائه شده توسط

preg، preg_match( ), preg_match_all(),
preg_replace() ), preg_replace_all( ),
preg_split( ) preg_quote( )

هستند. تابع preg_match( ) براساس تعداد پارامترهای استفاده شده در آن، نتایج متفاوتی می‌دهد. در ساده ترین حالت می‌تواند با دو پارامتر preg_match($pat, $str) اجرا شود. الگوی استفاده شده در متغیر $pat و استرینگ قابل جستجو در متغیر $str ذخیره شده است. این تابع TRUE می‌شود اگر الگوی ارائه شده در استرینگ یافت شود و FALSE می‌شود اگر هیچ ارتباطی یافت نشود.

یک کد ساده PHP با استفاده از عبارات باقاعده
حال که ایده‌ای راجع به سینتاکس عبارات باقاعده و نحوه عملکرد تابع preg می‌دانیم، کد ساده regex1.php را در نظر بگیرید:

<html>
<body>
<?php
$pat = ‘/You/’;
$str = ‘Open Source For You’;
if(preg_match($pat,$str))
{
echo ‘<b> Match Found </b>’;
}
else
{
echo ‘No Match Found’;
}
?>
</body>
</html>

 

برای مشاهده خروجی این کد، مرورگر وب را باز کرده و localhost/regex1.php را در نوار آدرس تایپ کنید. عبارت Match Found در مرورگر به‌صورت بولد نمایش داده می‌شود. هم‌چنین این کد نمایش می‌دهد که تابع preg_match( ) چگونه تطابق را جستجو می‌کند. بیایید این کد را خط به خط بررسی کنیم.
قسمت HTML کد نیازی به توضیح ندارد. در قسمت PHP، از دو متغیر $pat و $str استفاده کرده ایم. الگوی تطابقی در متغیر $pat ذخیره شده است با کدِ ‘$pat = ‘/You/’;’ . همانطور که می‌بینید حائل در عبارات با قاعده جفت‌های / است. متغیر $str حاوی استرینگی است که برای تطابق ممکن جستجو می‌کند و با خط

‘$str = ‘Open Source For You’;’

اجرا می‌شود. چندخط بعدی کد، مهارکننده if-else را دارد که پیامی براساس جمله if، پرینت می‌کند.
در خط

‘if(preg_match($pat,$str))’

با تابع preg_match( )، تبدیل به TRUE می‌شود اگر تطابق پیدا کند و اگر نکند، FALSE نمایان می‌شود. در صورت یافتن تطابق، کد

‘echo ‘<b> Match Found </b>’;’

درون مهارکننده if، عبارت بولد شده ‘Match Found’ را پرینت می‌کند. اگر تطابقی یافت نشود، کد ‘echo ‘No Match Found’;’ در مهارکننده else، پیام ‘No Match Found’ را پرینت می‌کند.
همچنین ممکن است این تابع را با سه پارامتر preg_match($pat, $str, $val) فراخوانی کنید، درحالیکه آرایه متغیر $val حاوی استرینگ یافت شده باشد. کد regex2.php را در نظر بگیرید:

<?php
$pat = ‘/b+/’;
$str = ‘aaaabbbbaaaa’;
if(preg_match($pat,$str,$val))
{
$temp = $val[0];
echo “<b> Matched string is $temp </b>”;
}
else
{
echo ‘No Match Found’;
}
?>

 

برای مشاهده خروجی این کد، مرورگر وب را باز کرده و

localhost/regex 2.php

را در نوار آدرس تایپ کنید. عبارت ‘Matched string is bbbb’ در مرورگر به‌صورت بولد نمایش داده می‌شود. هم‌چنین به ما می‌گوید که تابع preg_match( ) به‌دنبال بلندترین تطابق ممکن می‌رود.
بنابراین تابع به تطابقی کوتاهتر از استرینگ bbbb متصل نمی‌شود. متغیر $val[0] حاوی متن کامل تطابق براساس الگوی عبارات باقاعده است. در این مرحله، باید تفاوت بین استرینگ‌های موجود بین “” و ‘’ را شرح دهم. عبارات نوشته شده در علامت دوقلو، بجای پرینت اسم تنها، محتوی نوشته می‌شود ولی با دومی، تحت الفظی رفتار می‌شود.

 

سایر توابع preg
توابع مفید دیگری برای پردازش عبارات باقاعده توسط توابع preg وجود دارد، اما فقط یک تابع بسیار مفید با نام preg_replace() را شرح می‌دهیم که استرینگ‌های تطابقی را با استرینگ‌های دیگر جایگزین می‌کند. می‌تواند با سه متغیر استفاده شود:
preg_replace($pat, $rep, $str)
که $pat حاوی الگوی عبارت باقاعده، $rep حاوی استرینگ جایگزینی و $str حاوی استرینگی است که الگو در آن جستجو می‌شود. کد regex3.php را در نظر بگیرید:

<?php
$pat = ‘/World/’;
$rep = ‘Friends’;
$str = ‘Hello World’;
if(preg_match($pat,$str))
{
$str = preg_replace($pat,$rep,$str);
echo “<b> The modified string: $str </b>”; }
else
{
echo ‘No Match Found’;
}
?>

تابع preg_replace() محتویات متغیر $str را تغییر نمی‌دهد. به‌جای آن تابع استرینگ تغییریافته را برمی‌گرداند. در این مثال خط

‘$str = preg_replace($pat,$rep,$str);’

کلمه word را با Friends جایگزین می‌کند و این استرینگ در متغیر $str ذخیره می‌شود. برای مشاهده خروجی این کد، مرورگر وب را باز کرده و

localhost/regex3.php

را در نوار آدرس تایپ کنید. عبارت ‘The modified string: Hello Friends’ در مرورگر به‌صورت بولد نمایش داده می‌شود.

 

عبارت باقاعده برای اعتبارسنجی اعداد
حال می‌خواهیم ببینیم، چگونگه آشنایی ما با عبارات باقاعده به ما در ارزیابی اعداد با استفاده از PHP کمک می‌کند. هدف این است که ببینیم اعداد وارد شده طی HTML اعداد صحیح یا حقیقی هستند و آن را بولد در صفحه وب پرینت می‌کند.
اگر عدد ورودی نه صحیح باشد، نه حقیقی، عبارت ‘Not a number ’ به‌صورت بولد طاهر می‌شود. اما از لحاظ ریاضی، این عبارت صحیح نیست، زیرا اعداد Pi و اعداد مرکب ۵+۱۰i نوعی عدد هستند.
حتی سیستم‌های عددی پیچیده تری با نام‌های اعداد چهارگانه و هشت‌گانه داریم. برای دست‌یابی به هدف ابتدایی ذکر شده، کدهای number.html و number.php را داریم.
در ادامه کد number.html را می‌بینیم:

<html>
<body>
<form action=”number.php” method=”post”>
Enter a Number:
<input type=”text” name=”number”>
<input type=”submit” value=”CLICK”>
</form>
</body>
<html>

این کد اعداد را در زمینه متنی می‌خواند، و وقتی دکمه Submit فشرده شود، کد number.php فراخوانی می‌شود. داده ورودی، با استفاده از روش POST برای پردازش‎‌های آینده به کد number.php عرضه می‌شود.
در ادامه که کد number.php را مشاهده می‌کنیم باید قواعد فایل‌های HTML را به یاد بیاوریم. اگر این فایل با کدهای PHP ادغام شده باشد، شناسه فایل .php خواهد شد و اگر هیچ ادغامی صورت نپذیرفته باشد، شناسه فایل .html خواهد شد.

<html>
<body>
<?php
$pat1 = ‘/(^[+-]?\d+$)/’;
$pat2 = ‘/(^[+-]?\d*\.\d+$)/’;
$str = $_POST[“number”];
if(preg_match($pat1,$str))
{
echo ‘<b> Integer </b>’;
}
elseif(preg_match($pat2,$str))
{
echo ‘<b> Real Number </b>’;
}
else
{
echo ‘<b> Not a number </b>’;
}
?>
</body>
</html>

قسمت HTML فایل حاوی تگ‌های <html> و <body>است که معنی واضحی دارند. اما کد PHP موجود در این کد، نیاز به توضیح بیشتری دارد. دو الگوی عباراتی بتقتعده توسط کدهای PHP مفهوم پیدا می‌کنند که در متغیرهای $pat1 و $pat2 ذخیره شده است. اگر با دقت به این الگو نگاه کنید، مزیت استفاده از preg که برمبنای PCRE است را درک می‌کنید. خط

‘$pat1 = ‘/(^[+-]?\d+$)/’;’

نمایانگر الگوی عبارات باقاعده‌ ای است که به اعداد صحیح مکمل می‌شود. حتی اعدادی مثل ۱۱۱+ و ۲۲۲- با این عبارت مکمل می‌شوند.
خط بعدی،

‘$pat2 = ‘/(^[+-]?\d*\.\d+$)/’;’

نمایانگر الگوییست که به اعداد حقیقی مکمل می‌شود. در اینجا فقط اعدادی شناسایی می‌شوند که به آن‌ها اعداد منطقی می‌گویند. خب اگر بخواهیم بحث را خیلی ریاضی نکنیم، برای توصیفات دقیق راجع به اینگونه عبارات باقاعده به مقاله پِرل از سری مقالات ما، مراجعه کنید. بهترین قسمت استفاده از چنین قواعدی این است که می‌تواند در PHP بدون ایجاد کمترین تغییر استفاده شود. من یک تغییر در الگوی دوم به‌وجود آوردم

/(^[+-]?\d*\.\d+$)/

تا اعداد حقیقی در فرم ۳۳۳٫ را غربالگری کنم. عبارت با قاعده اصلی در پِرل، /(^[+-]?\d+\.\d+$)/ بوده است که فقط اعداد حقیقی با فرم ۰٫۳۳۳ را می‌شناسد.
خط بعدی،

‘$str = $_POST[“number”];’

داده ورودی را از فایل number.html می‌خواند و در متغیر $str ذخیره می‌کند. خطوط بعدی حاوی مهارکننده if-else است، که به ورودی حاوی دو الگوی عبارت با قاعده مکمل می‌شود.
تابع preg_match( ) در جمله ها به دنبال تطابق می‌گردد. وابسته به نتایج این تطابقات، کد PHP، پیام متناسب را در مرورگر به‌صورت بولد پرینت می‌کند. برای دیدن خروجی کد HTML، در نوار آدرس مرورگر

localhost/number.html

را تایپ کنید. نتیجه مطابق شکل ۳ خواهد بود.
در قسمت متن، عددی وارد کنید و سپس Submit را بزنید. یکی از سه پیام ، ‘Integer’ ، ‘Real Number’ یا ‘Not a number’ را خواهید دید. در شکل ۴ خروجی زمانی را مشاهده می‌کنید که عدد ۲۲۲٫۳۳۳ را به‌عنوان ورودی می‌دهید.
حالا که عبارات باقاعده پرفایده را مورد بحث قرار دادیم، وقت آن است که مقاله را خاتمه دهیم. تا جای ممکن سعی کردم علاوه بر توضیح عبارات باقاعده، زبان PHP را نیز شرح دهم.
من معتقدم که هدف تمام این سری مقالات این است که عبارات باقاعده چگونه در زبان‌های برنامه‌نویسی مختلف، کار می‌کنند.
حالا که عبارات با قاعده PHP را تحت پوشش قرار دادیم، مطمئنم که ایده‌هایی برای استفاده از آن دارید. اما عبارات باقاعده در Client چه خواهد شد؟
در مثال آخر، اعتبارسنجی می‌تواند توسط Client انجام شود و نیازی به فرستادن داده به سرور نباشد.
بنابراین در مقالات بعدی درباره استفاده از عبارات باقاعده در جاوااسکریپت – زبان برنامه نویسی Client بحث خواهیم کرد.

 

عبارات باقاعده در زبان‌های برنامه نویسی : PHP و وب عبارات باقاعده در زبان‌های برنامه نویسی : PHP و وب

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text