ورود

View Full Version : گفتگو: راه حلی برای اعتبارسنجی تاریخ شمسی (راست به چپ)



alireza_s_84
پنج شنبه 13 خرداد 1389, 13:37 عصر
سلام دوستان:
چند روز پیش کامپوننتی جهت اعتبارسنجی تاریخ شمسی توی این تاپیک (http://barnamenevis.org/forum/showthread.php?t=224799) قراردادم.
میخوام در اینجا در اینمورد صحبت کنیم که :
بهترین راه حل برای یک روش Cross-Browser مربوط به اعتبارسنجی در هنگامیکه خاصیت فیلد ما راست به چپ باشه چیه؟
شرح سناریو: برای کامپوننت خاصیتی بنام EnableRtlValidation یا RtlValidationMode رو برای کامپوننت قرار بدیم.
الف) خاصیت EnableRtlValidation از نوع بولین باشه و فقط دو مقدار بگیره در اینحالت تنها با مرورگر IE ما تاریخ 1387/12/23 رو میتونیم Validate کنیم. به عبارتی در همه ی مرورگرها اعداد انگلیسی نوشته میشه و تاریخ فوق در واقع 23/12/1387 خواهد بود چون خاصیت TRL برای TextBox ها عمل نمیکنه و اعداد همون انگلیسی نوشته میشن. البته اینمورد درسته چون تاریخ واقعیه ما در حالت فوق هم همینه ولی چون راست به چپ شده لذا به اون شکل کذایی دیده میشه. در اینحالت میتونیم با چک کردن نوع مرورگر(فقط IE) اعتبارسنجی کنیم.

ب) RtlValidationMode : یک نوع شمارشی باشه و سه Mode زیر رو بگیره:
Auto : بصورت خودکار با چک کردن نوع مرورگر اعتبارسنجی راست به چپ رو اعمال کنه یا نه.
OnlyIE: فقط اگر مرورگر IE باشه این خاصیت عمل کنه.
All: برای همه ی مرورگرها عمل کنه.
None: اصلا این خاصیت غیر فعال باشه و هر طور تاریخ وارد شده اعتبارسنجی کنه.

در حالت دوم ما گزینه های بیشتری داریم ولی به طبع کار پیچیده تری هم خواهیم داشت.
در حالت Auto همون کاری رو میکنیم که در سناریوی الف انجام دادیم. یعنی با توجه به نوع مرورگر تصمیم بگیریم.
OnlyIE که مشخصه فقط اگر مرورگر IE باشه این وضعیت رو قبول کنیم.
All: که مطمئنا در اینحالت مشکل سازه مگر اینکه کاری کنیم که مرورگرها هم مثل IE رفتار کنن که خب روشی به ذهن من نمیرسه.
None هم هر طور تاریخ وارد شد اعتبار سنجی کنیم که باز تقریبا همون حالت فوق رو داره.

حالا سوال اینجاست کدام از دو روش فوق پسندیده تره (یا اصلا چه روش بهتری وجود داره)؟
هر کدام از روشها مزایا و معایبی دارند لطفا در اینمورد بحث کنید.

salehbagheri
پنج شنبه 13 خرداد 1389, 15:46 عصر
اينطور كه من فهميدم شما در قسمت راست و چپ مرورگرها مشكل داريد! اين روش بسيار ناپايدار هست و به مرور زمان با ظهور مرورگرهاي جديد يا ارتقاي آنها ممكنه دچار اختلال بشه.

به نظرم كلاً اين روشها رو بذاريد كنار و از الگوريتم مناسبت تري استفاده كنيد.

مثلا مقدار ورودي رو با استفاده از كاراكتر جدا كننده (معمولاً «/») به سه قسمت جدا كنيد و مقداري كه 4 رقمه رو سال در نظر بگيريد و به همين ترتيب مقدار وسطي ماه و مقدار آخري رو روز!

استثناها ميتونن اينها باشن كه به راحتي قابل شناسايي هستند
1. اگه هيچ يك از مقادير جدا شده 4 رقمي نبود: Throw Exeption !
2. اگه مقادير بيشتر از 2 رقم بيشتر از 2 تا بود : Throw Exeption !
3. ...

قوانين رو هم ميتونيد اينطوري تنظيم كنيد كه:
مقدار سال رو حتما 4 رقمي وارد كنه! مثلا اگه سال 600 شمسي رو به صورت 0600 وارد كنه.
مقدار جدا كننده حتما / باشه!
ترتيب قرار گيري به صورت «روز ماه سال» باشه! يعني ماه در وسط قرار بگيره!

به اين روش ديگه مشكل چپ و راست حل ميشه !

alireza_s_84
پنج شنبه 13 خرداد 1389, 18:55 عصر
مرسی جناب باقری:
ولی این کامپوننت باید قادر باشه سال رو بصورت دو رقمی دریافت کنه. برای جداسازی تاریخ هم از همین الگوریتم استفاده میکنم. در واقع من مشکلی ندارم منظور من از این پست این بود که شما بهش اشاره کردی:

اينطور كه من فهميدم شما در قسمت راست و چپ مرورگرها مشكل داريد! اين روش بسيار ناپايدار هست و به مرور زمان با ظهور مرورگرهاي جديد يا ارتقاي آنها ممكنه دچار اختلال بشه.
سوال اینجاست آیا به همین اکتفا کنم و بر مبنای مرورگرهای امروزی عمل کنم(حالت اول چون فقط IE این مشکل رو داره) و یا اینکه از روش دوم استفاده کنم و اگر بعدها همه ی مرورگرها رفتارشون رو عوض کردن بازهم عمل بکنه؟؟؟
هر دو روش مشکل رو حل کردن ولی بحث بر سر اینه برای آینده و پیشبینی رفتار مروگرها چه کنیم؟

salehbagheri
پنج شنبه 13 خرداد 1389, 20:05 عصر
ولی این کامپوننت باید قادر باشه سال رو بصورت دو رقمی دریافت کنه

اين روش هم به راحتي پياده سازي ميشه!

به اين صورت كه محدوده اي رو به عنوان سال براي انتخاب كاربر قرار دهيد. مثلا سال 50 تا 99 ! (منظور 1350 تا 1399) هست.

چون اكثر برنامه هاي امروزي بين همين محدوده فعاليت دارند به اين كار هم نيازي نيست و فقط با يك شرط ساده ميتونيد سال رو جداسازي كنيد.

مثلاً عددي كه از 31 بيشتر بود به عنوان سال درنظر گرفته بشه كه اينطوري محدوده 1332 تا 1399 رو در اختيار خواهيد داشت.

به هر حال من نفهميدم شما چه نيازي به Direction مرورگرها داريد! :گیج:

alireza_s_84
پنج شنبه 13 خرداد 1389, 20:23 عصر
به اين صورت كه محدوده اي رو به عنوان سال براي انتخاب كاربر قرار دهيد. مثلا سال 50 تا 99 ! (منظور 1350 تا 1399) هست.
خب راه حل شما قابل قبوله ولی اگر در یک وب سایت تاریخ قرار شد تاریخ 2 هجری شمسی رو اعتبارسنجی کنن این کامپوننت عملا توانایی نخواهد داشت.

به هر حال من نفهميدم شما چه نيازي به Direction مرورگرها داريد!
توی پست اصلی که توضیح دادم توی این تاپیک (http://barnamenevis.org/forum/showthread.php?t=224799) شما نمونه رو میتونید دانلود کنید و تفاوت راست به چپ بودن تاریخ رو در مرورگرهای غیر از IE ببینید مثلا تاریخ 1387/12/23 رو شما در TextBox که خاصیت Rtl ست شده در IE به همین صورت میبینید اما در واقع این تاریخ برابر 23/12/1387 خواهد بود. یعنی نمایش صحیحه ولی اصل تاریخ چیز دیگه ایه. این حالت فقط در IE اتفاق میوفته.