PDA

View Full Version : تعیین محدودیت با Custome Validation



federrer
شنبه 09 تیر 1386, 04:39 صبح
چه جوری میشه با Custome Validation برای یه Text BOX چند تا رنج عددی مثلا 0-5 و 10-15 و 20 -25 رو تعیین کرد که کاربر فقط تو این رنجها بتونه عدد وارد کنه اگه غیر این وارد کرد پیغام خطا بده!!!!!!!!!

federrer
دوشنبه 11 تیر 1386, 07:44 صبح
سوالم تا حالا واسه کسی پیش نیومده ؟؟؟

تو Rane Validator خاصیتهای Manvalue و Minvalue داریم که فقط می تونیم حداکثر و حداقل مقدار ورودی رو برای کنترل (Text Box ) تعیین کنیم ولی اگه مثل این چیزی که من گفتم
چند تا بازه عددی داشته باشیم که فقط تو اون بازه ها کاربر باید مقدار وارد کنه این محدودیت رو با Custome Validation چه جوردی اعمال می کنیم ؟؟؟؟

babi_wd
دوشنبه 11 تیر 1386, 13:48 عصر
باید از RegularExpressionValidator استفاده کنید
سعی کنید خودتون Expression رو بنویسید چون بعدا به کارتون میاد
اگه نشد.بگین من یا دوستان براتون مینویسیم

ar.shirazi
دوشنبه 11 تیر 1386, 17:17 عصر
اگر اشتباه نکنم میتونین از چند تا validatorاستفاده کنین

ضمنا استفاده از همان Regular expression ها هم خیلی خوب است

اگر هم حل نشد ==> راه حل نهایی ==> Custome Validator

federrer
سه شنبه 12 تیر 1386, 18:52 عصر
والا من همین قد بلدم که تو Experssion با استفاده از


\d{min,max}


میشه تعداد کاراکتر های ورودی رو تعیین کرد.

babi_wd
سه شنبه 12 تیر 1386, 23:40 عصر
خوب جواب هم همینه،بینشون هم یا بزاری همون چیزی میشه که میخوای

federrer
چهارشنبه 13 تیر 1386, 16:14 عصر
مهندس جون نمی خوام تعداد کاراکتر های ورودی رو تعیین کنم می خوام مقدار ورودی کاربر

تو چند تا رنج خاص مجاز باشه !!

تعداد کاراکتر های ورودی <> مقدار ورودی

Behrouz_Rad
چهارشنبه 13 تیر 1386, 17:03 عصر
باید از RegularExpressionValidator استفاده کنی!
در اینجا نیاز به نوشتن یک عبارت منطقی سفارشی داری که مطمئنا باید با زبان RegularExpression آشنایی داشته باشی.
این زبان کمی پیچیده است و نیاز به تمرین و دقت داره.
این مورد رو طبق شرط هایی که خواسته بودی من واست نوشتم.
خاصیت ValidationExpression کنترل RegularExpressionValidator رو برابر با عبارت زیر قرار بده:


/^([0-5]|[1-1][0-5]|[2-2][0-5])$/

مطالعه و آشنایی هر چه بیشتر شما با عبارات منطقی، مطمئنا در درک بهتر کد فوق تاثیر گذار خواهد بود.

موفق باشید.

federrer
شنبه 16 تیر 1386, 21:51 عصر
دستت درد نکنه . خیلی ممنون

نوشتن ValidationExperssion رو چه جوری باید تمرین کنم ؟؟

Syntax نوشتن رو واسه حالتهای مختلف از کجا گیر بیارم ؟؟

Behrouz_Rad
شنبه 16 تیر 1386, 22:06 عصر
eBook های مختلفی برای RegularExpression وجود داره.
Search About It

موفق باشی.

federrer
چهارشنبه 20 تیر 1386, 20:29 عصر
مهندس با عرض شرمندگی

مثل اینکه یه مشکلی تو این فرمول وجود داره

شما در نظر بگیر بازه ما از 28 تا 34 باشه. طبق این روش بایداین کد رو تو Validation Expression بنویسیم :


/^([2-3][8-4])$/

ولی این یه مقدار InValid حساب میاد .

تو بازه ای که برای کاراکتر دوم ورودی در نظر می گیریم بازه [4-8] چه جوری تفسیر میشه که باعث خطا میشه ؟؟

Behrouz_Rad
چهارشنبه 20 تیر 1386, 22:45 عصر
عرض کردم که نکات فراوانی در Regular Expressions وجود داره که با تجربه و تمرین به دست میاد.
در Regular Expressions، یک بازه ی شروع که در یک براکت قرار میگیره نمیتونه از بازه ی پایانی کوچکتر باشه.
به عنوان مثال، برای تعیین بازه ی بین 4 تا 8، سینتکس زیر صحیح نیست:


/^([8-4])$/

اما سینتکس زیر صحیح هست:


/^([4-8])$/

در بازه ی 28 تا 34، براکت دوم به شکل [4-8] هست که درست نیست و همین باعث بُروز مشکل میشه.
باید به شکلی عمل کنی که این حالت رخ نده.
مثلا من به شکل زیر این کار رو انجام دادم:


/^(2[8-9]|3[0-4])$/

عدد اولی که قبل از هر براکت میبینی، عددی هست که به عنوان دهگان به اون نگاه میشه و اعداد داخل براکت نیز محدوده ای هستند که میتونن به عنوان عدد یکان اون دهگان در نظر گرفته بشن.
در سینتکس فوق، هیچگاه عدد اول از عدد دوم بزرگتر نخواهد شد.

موفق باشید.

federrer
پنج شنبه 21 تیر 1386, 05:01 صبح
دستتون درد نکنه مرسی

اگر بازه ما 2582 تا 3722 باشه و ما مقدار 3720 رو وارد کنیم با این که داخل بازه هستش ولی

پیغام خطا دریافت می کنیم !!!!!

Behrouz_Rad
پنج شنبه 21 تیر 1386, 09:30 صبح
اگر به توضیحات قبلی دقت کرده بودی، به راحتی میتونستی این فرم رو هم بنویسی.
به شکل ذیل بنویس:


/^(25[8-9][2-9]|26[0-9][0-9]|27[0-9][0-9]|28[0-9][0-9]|29[0-9][0-9]|30[0-9][0-9]|31[0-9][0-9]|32[0-9][0-9]|33[0-9][0-9]|34[0-9][0-9]|35[0-9][0-9]|36[0-9][0-9]|37[0-2][0-2])$/

موارد بعدی رو سعی کن خودت بنویسی.

موفق باشید.

federrer
پنج شنبه 21 تیر 1386, 20:10 عصر
بحث تازه داره جالب میشه
دستوری که شما نوشتین رو من اینجوری تفسیر می کنم . اگه جایی اشتباه می کنم تذکر بدید
رقم اول باید 2 یا 3 باشد

اگر رقم اول 2 بود :
رقم دوم باید بزرگترمساوی با 5 باشد.
رقم سوم باید بزرگترمساوی با 8 باشد .
رقم چهارم باید بزرگترمساوی با 2 باشد

بحث من سر دو مورد آخره !!
. عدی که وارد می کنیم میتونه رقم سومش کوچکتر از 8 و رقم چهارمش کوچکتر از 2 باشه !!!
یه مثال عدد 2600 رو در نظر میگیریم . تو بازه قرار داره و رقم سومش کوچکتر از 8 و رقم چهارمش کوچکتر از 2 هست

اگه وارد بشه پیغام خطا می گیریم !!

پس اگر رقم اول 2 بود باید حتما برای رقمهای سوم و چهارم بازه [9-0] رو در نظر بگیریم و اما مشکل میشه رقم دوم .

اگه همون بازه [9-5] رو در نظر بگیریم کاربر میتونه از 2500 تا 2581 رو هم وارد کنه که نباید بتونه :دی

حالا اگه بخوایم بازه 2500 تا 2581 رو از بازه 2500 تا 2599 خارج کنیم چه کار می کنیم ؟؟؟؟

Behrouz_Rad
جمعه 22 تیر 1386, 11:06 صبح
کد پست قبلی رو تصحیح کردم.
از این سینتکس جدید استفاده کن.

federrer
جمعه 22 تیر 1386, 11:24 صبح
من هر چی سنگ میندازم خلاصه یه چیزی رو می کنی : دی

دستت درد نکنه . از پیگیری شما ممنونم

مهندس جون اگه ممکنه راه حل جدید رو تو یه پست جدید بنویسین چون کسانی که

این تاپیک رو دنبال می کنن بدونن که پست قبلی رو من واسه چی نوشتم !

یه سوال کلی تر :

اگه بازه ما خیلی بزرگتر از این حرفها بود مثلا از یه عدد دو رقمی تا یه عدد شش رقمی .

اونوقت بازم دستی بازه ها رو تعریف کنیم ؟

Behrouz_Rad
جمعه 22 تیر 1386, 15:15 عصر
یک Regular Expression رو میشه به شکل های مختلف نوشت.
افرادی که رشته ی کامپیوتر هستند درسی به نام نظریه زبان ها دارند که ذهن اونها رو برای عبارات باقاعده تقویت میکنه...
میشه کارهای زیباتری انجام داد.
فرض کن من قصد دارم تا بازه ی بین اعداد 25 تا 6847 رو به عنوان محدوده ی مجاز تعیین کنم.
کاری که میشه انجام داد اینه که برای دهگان، هزارگان و ... محدوده ها رو به شکل مجزا تعیین کرد.
اگر به این روش عمل کنیم، اعدادی که برای ما مزاحمت ایجاد میکنن، اعداد محدوده ی 6000 تا 6847 هستند.
پس برای این اعداد محدوده رو به شکل مجزا تعیین میکنیم.
گفته های فوق رو در قالب سینتکس زیر میبینی:


/^([2-9][5-9]|[1-9][0-9][0-9]|[1-5][0-9][0-9][0-9]|6[0-8][0-4][0-7])$/


موفق باشید.

federrer
جمعه 22 تیر 1386, 21:49 عصر
از توضیحات کامل شما تشکر می کنم .

البته یه چیزی یادم اومد بگم
واسه یه بازه همون Range Validator کارمون رو راه میندازه .

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