• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نظرتان در مورد استفاده از توابع filter در PHP 5 بجای preg_match چیه؟
#1
سلام بر همه،
یکی از مشکلاتی که من با PHP دارم اینه که نمی تونم regular expression رو بفهمم. هیچوقت هم نمی تونم! چند وقت پیش با تابع filter_var آشنا شدم اما باز متوجه کارش نشدم ولی امروز یک مثالی دیدم و فهمیدم یک جورایی شبیه همون preg_match هست که تاحالا می دیدم. اول همه کاراکتر های غیرمجاز رو حذف می کنیم بعد اگر درست بود حله. این کاریه که خود تابع انجام میده و کافیه فقط نوعش رو ما مشخص کنیم. مثلاً من برای ایمیل کد زیر رو نوشتم:
کد پی‌اچ‌پی:
if( !filter_inputINPUT_POST'email'FILTER_VALIDATE_EMAIL ) ) {
return 
FALSE;
            }

حالا بنظر شما این تابع می تونه جای اون تابع سخت رو بگیره؟ آیا ایرادی توش وجود داره؟ گرچه توجه کنید این تابع برای PHP 5 به بالاست! Angel
غایب
  پاسخ
تشکر شده توسط : Goback
#2
انگار نظر خاصی ندارید ! Dodgy
غایب
  پاسخ
تشکر شده توسط :
#3
بسم الله الرحمن الرحیم
سلام
منم تو یکی از برنامه هام از این استفاده کردم:
کد پی‌اچ‌پی:
filter_var($emailFILTER_VALIDATE_EMAIL
قبلش از regular expressionاستفاده می کردم که واسه برخی ایمیل ها درست جواب نمی داد و با اینکه ایمیل مشکلی نداشت - خطا می داد (احتمالا دستوراتش درست نوشته نشده بون) / که بجاش از این استفاده کردم

البته اینم خیلی دقیق نیست / چون گاها ایمیل هایی ثبت می شه که درست نیست ولی با این حال از فیلترش رد می شه

ولی نسبت به regular expression خیلی راحتره
----
البته این regular expression رو هم بهتره یاد بگیری
چون خیلی جاها به کارت می یاد / تو آپاچی و همین preg و اینا

یه آموزشی تو برنامه نویس هست که تاپیکش رو bookmark کردم / خیلی خوب توضیح داده و می شه از این regular expression سردر آورد:
http://barnamenevis.org/forum/showthread.php?t=233318
البته این تابع می تونه نوع هایی رو ساپورت کنه: http://www.php.net/manual/en/filter.filters.php
ولی فکر نکنم بتونه جای preg_match رو بگیره
چون گاها چیزهایی ممکنه باشه که نشه از این تابع بجای preg_match استفاده کرد / مثلا می خوای مطلبی رو از سایتی بگیری اونوقت مجبوری خودت دستوری (با regular expression) بنویسی که بیاد مطلب رو از بین تگهایی برداره
که مطمئنا هم کار هر طراح وبی با طراح وب دیگر متفاوت هست و عین هم کد نمی زنن و در نتیجه regular expression متفاوتی هم خواهیم داشت

یا گاها مقادیری از فرم هایی باید دریافت بشه که فقط مختص یه سایتی/سازمانی/شرکتی هست / یا مثلا هر کشوری کدهای خاط خودش رو داره (تلفن - شناسنامه - شماره پلاک ماشین و ...) که در هر جایی regular expression متفاوتی باید باشه و در نتیجه نمی شه بجاش از filter_var (با نوع های از پیش تعریف شده) استفاده کرد
  پاسخ
تشکر شده توسط : Goback vejmad cyletech paull
#4
حسین جونم طبق تعریف خود php.net از FILTER_SANITIZE_EMAIL ، همه کاراکتر ها بجز حروف ، ارقام و کاراکتر های ویژه که در زیر آوردم:
کد:
!#$%&'*+-/=?^_`{|}[email protected][]
در صورتی که برای ایمیل اصلاً از کاراکتر ^ استفاده نمیشه! پس اگر نفوذگر بخواد آدرس ایمیل قلابی وارد کنه خیلی راحت می تونه کارش رو پیش ببره. ولی چیزی که متوجه شدم از این تابع و این نوع ، اینه که آدرس ایمیل اگر بدون @ باشه کار نمی کنه! فقط همین. البته اگر درست گفته باشم ها! اگر اینطوری باشه ، اصلاً نمیتونه جای regular expression رو بگیره و حتماً مصارف دیگه ای داره. نظر شما چیه؟
غایب
  پاسخ
تشکر شده توسط : Goback
#5
از همه اینا (کاراکترها) واسه آدرس ایمیل می شه استفاده کرد و نباید مشکلی ایجاد کنه و در این دو لینک های زیر هم چیزهایی نوشته شده:
http://en.wikipedia.org/wiki/International_e-mail
http://en.wikipedia.org/wiki/E-mail_address

حالا اینکه برخی سرویس دهنده ها اجازه استفاده از برخی کاراکتر ها نمی دن دیگه این به مسائل شرکتون مربوط می شه و بستگی به سرویس دهنده داره که اجازه بده یا خیر (یا از لحاظ امنیتی یا ...)
کد:
Within the rules set out in the RFCs, organizations are free to restrict the forms of their own email addresses as desired, e.g., many organizations do not use certain characters (space, ?, and ^) and most organizations treat uppercase and lowercase letters as equivalent. Windows Live Hotmail, for example, only allows creation of email addresses using alphanumerics, dot (.), underscore (_) and hyphen (-)

در لینک اولی همانطوری که می بینی (این قسمت زیر) نوشته این آدرس ایمیل ها معتبر هست:
کد:
The following are valid traditional e-mail addresses:

  [email protected]                                (English, ASCII)
  [email protected]                            (English, ASCII)
  user+mailbox/[email protected]   (English, ASCII)
  !#$%&'*+-/=?^_`.{|}[email protected]               (English, ASCII)
  "[email protected]"@example.com                          (English, ASCII)
  "Fred Bloggs"@example.com                      (English, ASCII)
  "Joe.\\Blow"@example.com                       (English, ASCII)
با اینکه برخی شرکت ها اجازه استفاده ازشون رو نمی ده
  پاسخ
تشکر شده توسط : Goback paull cyletech
#6
در تكميل كردن صحبتتون تابع filter_var گزينه اي براي استفاده از regular expression هم داره:
http://www.w3schools.com/php/filter_validate_regexp.asp
  پاسخ
تشکر شده توسط : cyletech hosseintdk775
#7
ممنونم حسین جونم زیاد زیاد. این لینک هایی که دادی و حرفایی که زدی خیلی خیلی مفید بود و واقعاً یکی از دانسته های اشتباهم رو برطرف ساخت Heart
از پروانه خانم هم خیلی خیلی تشکر می کنم. نمیدونستم یکی از انواعی که برای تابع filter تعریف شده مربوط به REGEXP میشه. البته جای ناراحتی هم داره چون انگار این عبارات با قاعده نمیخواد ولم کنه Big Grin ولی می خورمش Tongue با لینکی که صالح داده امیدوارم بشه خوب فرا گرفتش Angel
غایب
  پاسخ
تشکر شده توسط : hosseintdk775 parvane


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان