PHP Regular Expressions
عبارات با قاعده اوصولا با جاوااسکریپت سنجیده میشود چون در مرورگر نمایش داه میشود و اطلاعات ناقص دیگر به سرور ارسال نمیشود. حال اگر بخواهیم اطلاعات در سرور ذخیره شود. با php اینکارو انجام میدهیم. برای اینکار از سه تابع استفاده میکنیم که برای php تعریف شده است.
- preg_match()
برای اینکه دنبال یک الگو بگردیم با تابع preg_match() اینکار رو انجام میدهیم. این تابع دو مقدار می گیرد یکی الگویی که تعریف شده و دیگری رشته ای که می خواهیم جستجو در آن انجام شود. مانند نمونه زیر:
<?php
$str = “Visit W3Schools”;
$pattern = “/w3schools/i”;
echo preg_match($pattern, $str); // Outputs 1
?>
- preg_match_all()
برای اینکه هر نوع داه که شامل الگو هست رو برگردونه از این تابع استفاده می کنیم. این تابع نیز الگو و رشته مورد نظر را به عنوان مقدار میگیرد. به مثال زیر توجه کنید :
<?php
$str = “The rain in SPAIN falls mainly on the plains.”;
$pattern = “/ain/i”;
echo preg_match_all($pattern, $str); // Outputs 4
?>
در این مثال حتی اگر بخش از جمله مطابق الگو باشد برمیگرداند
- preg_replace()
این تابع که کاربرد زیادی دارد برای جایگزین کردن یک کلمه استفاده میشود. این تابع سه مقدار می گیرد. مقدار اول پترنی است که تعریف شده دومی عبارتی که میخواهیم جایگزین شود و سومی رشته تعریف شده است. به مثال زیر توجه کنید:
<?php
$str = “Visit Microsoft!”;
$pattern = “/microsoft/i”;
echo preg_replace($pattern, “W3Schools”, $str); // Outputs “Visit W3Schools!”
?>
Regular Expression Modifiers
Modifiers یا اصلاح کننده ها می توانند نحوه انجام جستجو را تغییر دهند.
i : جستجوی غیر حساس به حروف بزرگ را انجام می دهد
m : جستجوی چند خطی را انجام می دهد (الگوهایی که ابتدا یا انتهای یک رشته را جستجو می کنند با ابتدا یا انتهای هر خط مطابقت دارند)
u : تطبیق صحیح الگوهای کدگذاری شده UTF-8 را فعال میکند
(الگوهای عبارات با قاعده)Regular Expression Patterns
[abc] یک کاراکتر از گزینه های بین پرانتز پیدا میکند
[abc^] هر کاراکتری که بین پرانتزها نباشد را پیدا میکند
[0-9] اعداد 0 تا 9 را پیدا میکند
Metacharacters
| : برای هر یک از الگوهای جدا شده با | مطابقت پیدا کنید مانند: گربه|سگ|ماهی
. : فقط یک نمونه از هر شخصیت را پیدا می کند
^ : یک مطابقت را به عنوان ابتدای یک رشته پیدا می کند مانند: ^Hello
$ : یک مطابقت در انتهای رشته پیدا می کند مانند: World$
\d : یک رقم پیدا می کند
s \: یک کاراکتر فضای خالی پیدا می کند
b \: یک مطابقت در ابتدای کلمه ای مانند این پیدا می کند: bWORD \یا در پایان کلمه ای مانند این: WORD\b
uxxxx \ : کاراکتر Unicode مشخص شده توسط عدد هگزادسیمال xxxx را پیدا کنید
PHP Forms – Validate E-mail and URL
برای تشخیص درستی یا نادرستی ایمیل یک کاربر و یا url یک وبسایت در php میتوانیم از عبارات با قاعده استفاده کنیم. برای اینکار باید داده ها را با متد post دریافت کنیم.
$email = test_input($_POST[“email”]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = “Invalid email format”;
}
برای اعتبار سنجی ایمیل ابتدا داده را با متد پست دریافت می کنیم بعد با تابع filter_var متغیر ایمیل را فیلتر میکنیم این تابع درستی یا نادرستی فرمت ایمیل را مشخص می کند البته می توان با تابع preg_match() نیز اینکار را انجام داد.
$website = test_input($_POST[“website”]);
if (!preg_match(“/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i”,$website)) {
$websiteErr = “Invalid URL”;
}
برای اعتبار سنجی ادرس یک وبسایت مانند عبارت بالا داده را با متد post میگیریم سپس با تابع preg_match عبارت باقاعده را تعیین می کنیم. اگر در قالب شرط بررسی کنیم میتوانیم داخل if پترن را قرار دهیم و اگر درست نبود یک پیغام به کاربر نمایش دهیم.
این حالت را می توانیم برای تمام ورودی های فرم انجام دهیم. و عبارت با قاعده مد نظر را تعریف کنیم و به کار بندیم.
- اگر بخواهیم مقادیر وارد شده داخل فرم بماند تا مثلا اگر یک خطایی بود و بقیه درست بود موارد درست با کلیک کردن دکمه ارسال حذف نشود می توانیم برای هر فیلد یک value تعریف کنیم و داخل value یک کد php بنویسم و مقدار را برگردانیم. مثلا برای فیلد name به این صورت عمل می کنیم .
Name: <input type=”text” name=”name” value=”<?php echo $name;?>”>