PDA

View Full Version : سوال: محدود کردن ورودی به کارکتر های فارسی



trade_mark
سه شنبه 28 اردیبهشت 1389, 18:23 عصر
سلام
من یه فرمی طراحی کردم که در قسمت نام و نام خانوادگی می خوام اطلاعات دریافتی فقط کاراکتر های فارسی باشه
بهترین دستور برای این کار چیه؟
آیا با دستور preg_replace می تونم این کار رو انجام بدم؟در صورت امکان قسمت preg_replace رو برام بنویسین
با تشکر

pashaie
سه شنبه 28 اردیبهشت 1389, 19:37 عصر
اگه می خوای طرف فقط بتونه تو فرم فارسی تایپ کنه، از این اسکریپت استفاده کن -- نحوه استفاده اش داخل خود فایل هست.
حالا اگه به خوای واسه مطمئن شدن تو کد php هم چک کنی، باید کد یونیکد الفبای فارسی رو پیدا کنی و با preg_match چک کنی ببینی تو اون محدوده هست یا نه

Sharpist
سه شنبه 28 اردیبهشت 1389, 20:07 عصر
در نسخه های فعلی PHP چون از یونیکد پشتیبانی نمیشه، توصیه اکید میشه که از تابع های ناسازگار با یونیکد استفاده نکنید.
بهترین روش، استفاده از افزونه ی mb_string هست.
http://ir.php.net/mb_string

trade_mark
سه شنبه 28 اردیبهشت 1389, 21:24 عصر
mr sharpist & mr pashaie
دستتون درد نکنه
ولی میشه یه مثال از کد های php بزنین

trade_mark
چهارشنبه 29 اردیبهشت 1389, 12:31 عصر
یکی پیدا نمیشه کار مارو را بندازه؟!!!
یه مثال ساده هم از preg_match بزننین ممنون میشم
:تشویق::تشویق::تشویق:

rapidpich
چهارشنبه 29 اردیبهشت 1389, 22:51 عصر
ببین دنبال کاراکتر های بد باش و از اونا ایراد بگیر



/[a-z0-9]/i

trade_mark
چهارشنبه 29 اردیبهشت 1389, 23:37 عصر
ببین دنبال کاراکتر های بد باش و از اونا ایراد بگیر



/[a-z0-9]/i



ایده جالبی بود ولی من از این کد می خوام استفاده کنم به نظر شما ایرادی نداره:

if(preg_match('#[(ابپتثجچحیخدذرزسشطظعغفقکگ منوهيئضص)+]#',$note)){

امیـرحسین
چهارشنبه 29 اردیبهشت 1389, 23:54 عصر
طبق این مطلب: Unicode Regular Expressions (http://www.regular-expressions.info/unicode.html)، برای کار با کاراکترهای یونیکد، باید از کد هگزادیسمال اونها استفاده کنیم و این کدها رو با u\ شروع کنیم. مثلا بجای "ب" از "uD8A8\" استفاده کنیم. البته این کدها معمولا پشت سر هم هستند یعنی میشه با تعیین محدوده، خیلی هاشون رو تعریف کرد.
البته یه سری الگوی آماده هم تعریف شده که شامل همه کاراکترهای یک زبان میشه مثلا ارمنی، ژاپنی. لیست این زبانها توی لینک بالا هست که فارسی جزوشون نیست. ولی میشه از عربی استفاده کرد و گچپژ رو بصورت جداگانه اضافه کرد.

توی PHP تابع bin2hex (http://ir.php.net/manual/en/function.bin2hex.php)، کاراکترها رو به هگزادسیمال چهار حرفی تبدیل می کنه.

pashaie
چهارشنبه 29 اردیبهشت 1389, 23:57 عصر
بزار ببینم من منظور شما رو از این سوال درست متوجه شدم یا نه؟
شما قصد داری کاربر مجبور کنی که تو یه قسمتی حتما فارسی تایپ کنه، بنابر این می خوای سمت سرور چک کنی که آیا کاربر قسمت مورد نظر رو فارسی تایپ کرده یا نه، اگه فارسی تایپ نکرده بود پیغام بدی که " آقا/خانوم جان فارسی به تایپان!"
منظور شما رو درست متوجه شدم؟

اگه اینطوریه، می تونی از یه روش دیگه که دردسرش از بالایه کمتره، استفاده کنی، همون فایل js که بالا واست attach کردم رو به اول صفحه اضافه کن، و بعد به هر text یا textarea که خواستی کاربر رو مجبور کنی فارسی تایپ کنه اتریبیوت Lang="fa" رو اضافه می کنی و حاجی حاجی مکه!
البته شاید بگی که خوب یه کاربر حرفه ای خیلی راحت می تونه با انواع و اقسام روش ها اسکریپت سمت کلاینت رو بپیچونه و .... ، ولی باید اینجا توجه داشته باشی که برفرض کسی هم همچین کاری کرد، فوقش اینه که بجایی اسم فارسیش، انگلیسی نوشته همین! نه سایت می ترکه و نه به کسی ضرری وارد می شه.
در کل نظر شخصی من اینه که از اسکریپ سمت کلاینت استفاده کنی!

راستی، این فایلی که واست دادم در اصل واسه مجبور کردن به تایپ فارسی نیستش :لبخند:
ولی خیلی راحت می تونی تنظیمش کنی که آیکون انتخاب زبان رو نشون نده و چون زبان پبش فرضش فارسیه، در نتیجه فرسی باقی می مونه !
برای غیر فعال کردن آیکون انتخاب زبانش کد

ShowChangeLangButton : 1,
به

ShowChangeLangButton : 0,
تغییر بده؛ به همین ساده گی

اینم یه نمونه مثال


<html>
<head>
<title>Test</title>
<script language="javascript" src="farsitype.js" type="text/javascript"></script>
</head>
<body>
This is just for test! <br>
<input type="text" name="test" lang="fa" >
</body>
</html>

trade_mark
پنج شنبه 30 اردیبهشت 1389, 14:15 عصر
آقای پاشایی شما سوال منو دقیقا متوجه شدی
ولی جواب منو ندادی :قلب:
من می خوام این کار حتما در سمت سرور انجام بشه و خیلی هم برام اهمیت داره
امیر حسین دست گلت درد نکنه
دارم رو پیشنهادت کار می کنم تا ببینم به نتیجه می رسم یا .و...
راستی نظرتون رو در مورد کد زیر هم بگین

if(preg_match('#[(ابپتثجچحیخدذرزسشطظعغفقکگ منوهيئضص)+]#',$note)){

pashaie
پنج شنبه 30 اردیبهشت 1389, 16:57 عصر
خدا نصیب هیچکی نکنه این رگولار نوشتنو!

اینم خدمت شما دوست عزیز



$pattern = "/^[\s\x{0600}-\x{06FF}0-9]*$/u";

if (preg_match($pattern, "تست کردن ي 345", $matches)) {
echo "Haha";
} else {
echo "Oops!";
}

اگه بخوای عدد رو قبول نکنه پرترنو عوض کن بزار


$pattern = "/^[\s\x{0600}-\x{06FF}]*$/u";

trade_mark
پنج شنبه 30 اردیبهشت 1389, 17:08 عصر
دستت درد نکنه:بوس: