عبارات با قاعده در PHP – اعتبارسنجی آدرس و شماره تلفن

0 142

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

اعتبارسنجی آدرس در PHP

برای اعتبار سنجی در مورد آدرس کار بخصوصی لازم نیست انجام دهیم. کافی است؛ به آدرس C:\wamp\www\ecommerce\includes بروید و فایل server.php را با استفاده از Notepad++ باز و کدهای زیر را در آن پیدا کنید.

آنها را پاک کنید و به جای آنها کدهای زیر را قرار دهید.

حالا wamp را روشن کنید و آدرس http://localhost/ecommerce/customer_register.php را در مروگر خود باز کنید.

با توجه به تصاویر زیر به صورت عملی کدهای نوشته شده را تست می کنیم.

وقتی که آدرس وارد نشده باشد

حالا اگر بر روی دکمه “ایجاد نام کاربری ” فشار دهید، تصویر زیر را خواهید دید.

پیام خطایی که وقتی آدرس وارد نشده باشد

اگر در مورد آدرس و توابع استفاده شده در آن مشکل دارید می توانید به این قسمت مراجعه نمایید.

حال می خواهیم به این موضوع بپردازیم که اگر کاربر شماره تلفن را به درستی وارد نکرد چه اتفاقی می افتد؟

در این اعتبارسنجی باید برای شماره موبایل یک قالب (pattern) یا الگو به وسیله ی عبارات با قاعده (Regular expressions) بنویسیم. مثلا همه ما می دانیم که شماره موبایل با 09 شروع می شود و تعداد ارقام به کار رفته در شماره موبایل 11 رقم می باشد.

در ادامه شما را با عبارات با قاعده (Regular expressions) و همچنین تابع preg_match()  آشنا می کنم و با استفاده از آنها هر نوع اعتبار سنجی را با همدیگر انجام می دهیم.

عبارات با قاعده در PHP یا Regular expressions

دو نکته حائز اهمیت در مورد عبارات با قاعده وجود دارد:

  1. نکته اول این است که عبارات با قاعده در برنامه نویسی پیشرفته بسیار پرکاربرد می باشند
  2. نکته دوم این است که فهم آنها آسان است ولی نوشتن آنها مشکل

زمانی که با قوانین نوشتن عبارات با قاعده در PHP آشنا شوید، به مرور زمان به کاربردها و نتایج جالبی که ایجاد می کند، پی می برید. پرداختن به عبارات با قاعده (Regular expressions) در این قسمت، تنها ذره ای از مطالب این مفهوم را در اختیار شما قرار می دهد، اما برای اینکه در مسیر آموختن این مطلب قرار بگیرید ، کافی است تکرار و تمرین و به تبع آن تحقیقات بیشتری انجام دهید.

عبارات با قاعده در PHP را می توان به صورت یک سیستم برای اعمال یک طرح یا قالب (pattern)، در نظر گرفت.

ابتدا شما این طرح یا قالب را ایجاد می نمایید و سپس با استفاده از یکی از توابع پیش ساخته PHP (در اینجا با استفاده از تابع preg_match)، آنرا به یک متن متناظر (match) می کنید (دقت کنید که عبارات با قاعده در PHP بیشتر در مورد رشته ها، به کار می روند). در ادامه ابتدا شما را با دو مفهوم الفاظ و فوق کاراکترها آشنا می کنم و در ادامه عبارت منظم مورد نیاز برای تشخیص شماره تلفن را با همدیگر می سازیم.

الفاظ (Literals)

اولین دسته از کاراکترها، برای استفاده در طرحها، الفاظ (literals) می باشند. الفاط در حقیقت کاراکترهایی هستند که به همان صورت که نوشته می شوند، تفسیر می شوند. برای مثال، “a” تنها به حرف a متناظر می شود، و یا “ab” تنها به ab و به همین ترتیب.

فوق کاراکترها

فوق کاراکترها، در حقیقت سمبل های ویژه ای هستند، که دارای یک مفهوم و معنای خاص می باشند.

برای مثال اولین فوق کاراکتر، نقطه(.) می باشد که با هر کاراکتری متناظر می شود. بنابراین بر خلاف “a” که تنها به حرف a متناظر می شود. “.” به هر یک از حروف مانند a، b، c  و غیره متناظر می شود.

یک نکته جالب و مهم در مورد فوق کاراکترها این است که برای اشاره به خود فوق کاراکتر و استفاده از نمایش حقیقی این کاراکترها، باید از یک علامت بک اسلش (\) قبل از هر یک از آنها استفاده کنید.

از جمله فوق کاراکترهای دیگر ، سه فوق کاراکتر می باشند که با حالتهای مختلفی، متناظر می شوند. برای مثال، “*a” با هر تعداد (صفر و یا بیشتر) کاراکتر a  متناظر می شود (a, aa , aaa , …)  و یا “+a” با تعداد یک یا بیشتر از یک کاراکتر a متناظر می شود (a,a… ولی حداقل یک a وجود داشته باشد)؛ “?a” با حداکثر یک a متناظر می شود (a و یا بدون a) در این مثالها می توانید کاراکتر a را با هر کاراکتر دیگری جایگزین کنید.

لیست زیر تقریبا تمام کاراکترهای ویژه که در عبارات با قاعده در PHP به کار می روند را نشان می دهد.

کاراکترهای ویژه برای عبارات با قاعده
کاراکتر متناظر می شود با:
. هر کاراکتری
a^ رشته ای که با a شروع می شود. 
$a رشته ای که به a ختم می شود.
+a حداقل یک a
?a صفر و یا یک a
n\ خط جدید
t\ tab
\ (برای escape)
(ab) گروه ab
a/b a و یا b
{2}a aa
{1,3}a a, aa , aaa
[a-z] حروف کوچک
[A-Z] حروف بزرگ
[0-9] ارقام

حالا بعد از شناختی که از عبارات با قاعده در PHP پیدا کردیم به تعریف تابع preg_match می پردازیم.

تابع preg_match برای عبارات با قاعده در PHP چه کاری انجام می دهد

این تابع دو پارامتر ورودی دارد، پارامتر اول همان عبارت منظمی است که ما آن را به عنوان یک الگو یا طرح می سازیم و دومین پارامتر هم رشته ای است که قصد داریم ببینیم که آیا با عبارت با قاعده، متناظر (match) می شود یا نه. به طور خلاصه به کمک این تابع میتوانیم یک رشته را بر اساس الگویی که نوشتیم بررسی کنیم که رشته مورد نظر ما هست یا خیر.

نحوی استفاده از این تابع به صورت زیر است

همانطور که مشاهده می کنید، این تابع ۵ پارامتر می گیرد. دقت کنید که ۲ تا از پارامترها باید هنگام تعریف تابع حتما وجود داشته باشند (اجباری هستند) و ۳ تای دیگر از این پارامترها حالت اختیاری دارند.

پارامترهای ورودی توضیح
string $pattern  این پارامتر همان الگوی ما است که با عبارات با قاعده ساخته می شود. این پارامتر اجباری است.
string $subject [  این پارامتر همان عبارتی است که باید در آن به جست و جو الگو پرداخت. این پارامتر اجباری است.
array &$matches [  این پارامتر، جست و جوی های پیدا شده را درون خودش نگهداری می کند.این پارامتر اختیاری است.
int $flags = 0 [ این پارامتر اختیاری است. این پارامتر اگر مقدار دهی شود، برای هر جست و جوی یافت شده، عبارت آفست رو بر میگرداند. این پارامتر دو مقدار زیر را می تواند انتخاب کند.PREG_OFFSET_CAPTURE و PREG_UNMATCHED_AS_NULL 
int $offset = 0 با استفاده از این پارامتر می توانید بگویید که جست و جو را از کجای رشته شروع کند (پیش فرض از اول رشته شروع می کنه). این پارامتر اختیاری است.

دقت کنید که خروجی این تابع یا  0 می شود و یا 1 و یا FALSE.

  1. زمانی 1 می شود که الگوی داده شده به آن، در رشته مورد جستجو یافت شو
  2. زمانی 0 می شود که الگوی داده شده در رشته ورودی، پیدا نشود
  3. FALSE هم زمانی رخ می دهد که یک errore در حین کار بوجود بیاید
یک نکته بسیار مهم این است که همواره از عملگر === برای تست مقدار بازگشتی این تابع استفاده کنید.

اجرای عبارات با قاعده در PHP برای یافتن شماره موبایل دلخواه

حالا که با دو مفهوم عبارات با قاعده در PHP و تابع preg_match آشنا شدیم، اجازه بدهید در یک مثال عملی نحوی به دست آوردن شماره موبایل دلخواه را با همدیگر مشاهده نماییم.

به آدرس C:\wamp\www\ecommerce\includes بروید و فایل server.php را با استفاده از Notepad++ باز کرده و کدهای زیر را در آن پیدا کنید.

آنها را پاک کنید و کدهای زیر را به جای آنها قرار دهید.

همانطور که در کدهای بالا مشاهده می کنید، در قسمتی که شرط را آورده ایم (به کدهای زیر دقت کنید):

از تابع preg_match استفاده شده است که دو پارامتر را به آن پاس داده ایم یکی عبارت با قاعده /^[0]{1}[9]{1}\d{9}$/ می باشد و دومین پارامتر تلفن وارد شده توسط کاربر است.

عبارت با قاعده استفاده شده به این صورت تفسیر می شود که

  • /^ : رشته از اینجا شروع می شود
  • [0]{1}: به تعداد یک رقم، باید صفر داشته باشد
  • [9]{1}: به تعداد یک رقم، باید نه داشته باشد
  • \d{9}: دقت کنید که \d عبارت میانبری برای [0-9] می باشد. این یعنی اینکه، تعداد 9 رقم داریم که رنج اعداد 0 تا 9 باید داشته باشد
  • $/ : پایان رشته را نشان می دهد

با توجه به توضیحات بالا تابع preg_match بررسی می کند که آیا شماره موبایل وارد شده با الگوی تعریف شده توسط ما(*********09) مطابقت دارد یا خیر؟

حالا با همدیگر به صورت عملی برنامه ای را که نوشته ایم چک می کنیم. به تصاویر زیر نگاه کنید. ابتدا هیچ شماره موبایلی وارد نمی کنیم:

اعتبارسنجی ورودی شماره موبایل در PHP

در تصویر زیر مشاهده می کنید که وب سایت چه واکنشی از خودش نشان می دهد.

اعتبارسنجی شماره موبایل در PHP با عبارات با قاعده

در حالت دوم سعی می کنیم یک شماره تلفن اشتباه را وارد کنیم.

عبارات با قاعده در PHP

در تصویر زیر مشاهده می کنید که نرم افزار ما به راحتی شماره موبایل اشتباه را تشخیص داده و پیام مناسب را به کاربر می دهد.

نمایش پیغام مناسب در اعتبارسنجی شماره موبایل

خب دوستان عزیز در پایان برای شما فایل نهایی server.php را قرار داده ام تا کل کدهای این فایل را تا این لحظه مشاهده نمایید.

عزیزان خسته نباشید، به پایان این قسمت از سری قسمت های آموزش ساخت فروشگاه اینترنتی با php رسیدیم، انشاالله که لذت کافی رو از کدهای نوشته شده، برده باشید. در قسمت آینده به سراغ ورودی پسورد می رویم. اعتبار سنجی ورودی پسورد هم مانند ورودی شماره تلفن است اما با شرایط ویژه ی خودش (قسمت آینده عبارات با قاعده پیچیده تری را خواهم داشت). موفق باشید

ترتیبی که روکسو برای یادگیری مطالب سری فروشگاه اینترنتی با PHP به شما توصیه می‌کند:

ارسال نظر

توجه:‌ آدرس ایمیل شما منتشر نخواهد شد.