برای ایجاد این قابلیت و حتی کنترل داده های دیگر شما میتونید از تکنیک Regular Expression یا عبارات با قائده استفاده کنید در ادامه این تکنیک رو توضیح میدم و سپس مثال عملی رو خدمتتون میگم ، یک سری کارکتر هایی هست که به تنهایی معنی نمیده ولی وقتی در کلاس System.Text.RegularExpressions.Regex.IsMatch قرار میگیرند از اهمیت برخوردار میشوند شاید کمی حفط کردنش سخت باشه ،ضمناً شاید یکی از مشکلترین کارهایی که به خصوص برنامه نویس ها با اون سر و کار دارند، ایجاد Regular Expressions جهت استفاده در برنامه ها هست.
البته اگر دائماً بخواهید با این عبارات کار کنید به مرور این کارکتر ها برای شما معنی پیدا میکنه هر چند شما میتونید همیشه از کدی که در انتها قرار میدم برای ایمیل خودتون در برنامه تون استفاده کنید چون این ها تکه کد هایی هستند که نیازی به تغییر ندارد، در ادامه این کارکتر ها و وظیفه شون رو میگم خدمتتون.
- / آغاز و پايان توضيح قاعده اي (همیشه شروع و پایان توضیح های با قائده با کارکتر اسلش میباشد)
- ^ آغاز توضيح پيشرفته (در ابتدای عبارات پیچیده باقائده وجود این کارکتر الزامی است)
- $ پايان توضيح پيشرفته (زمانی که از ^ استفاده شود در انتهای عبارت وجود دالر یا $ الزامی است)
نكته : اگر كاراكتري را خارج از توضيح پيشرفته قرار دهيم آنگاه حتي يك عدد از آن كاراكتر هم اگر در هر جا از رشته اصلي يافت شود مقدار صحيح را بر مي گرداند.
- . ( دات ) معادل يك كاراكتر تعريف نشده يا مجهول
- \ براي قرار دادن نقطه از بك اسلش نقطه استفاده مي كنيم(هر گاه خواستید از دات برای عبارات باقائده استفاده کنید ملزم به استفاده از بک اسلش \ هستید)
تعاريف زير فقط براي يك كاراكتر شرط مي گذارند اما مي توانيم بعدا بوسيله كاراكترهاي اقدام در تعداد آنها را گسترش دهيم
- \w كاراكترهاي a...z A...Z 0...9 _ كه اصطلاحا مي گوييم كاراكترهاي استاندارد
نكته : به کوچکی یا بزرگی کارکتر ها دقت کنید
- \W هر كاراكتري غير از موارد فوق
- \d فقط يك عدد تك رقمي
- \D محدوديت عدد يعني هر چيز غير از عدد
- \A فقط كاراكتر خط بعد
- \s فقط كاراكتر فاصله
- \S محدوديت كاراكتر فاصله
- \t فقط كاراكتر تب
- \xf1 فقط كاراكتري از مجموعه كاراكترهاي استاندارد امريكايي كه شماره آن معادل اين عدد دو رقمي شانزده تايي باشد
- \o31 يك كاراكتر از همان مجموعه بالا كه معادل اين عدد دو رقمي 8 تايي باشد
- [abc] يك كاراكتر كه برابر يكي از كاراكترهاي داخل براكت باشد
- [^abc] برابر هيچ كدام از كاراكترهاي داخل براكت نباشد
- [a-f] برابر يكي از كاراكترهاي اي تا اف باشد
- () بوسيله پرانتز مي توانيم دسته اي از تعاريف را در يك گروه جمع نماييم كه مي تواند براي يك يا چند كاراكتر باشد و بعدا تعداد دفعات آن را افزايش دهيم.
داخل براكت كلا بين كاراكترها (يا) برقرار است و اصلا نيازي به عبارات منطقي (يا) و (و) نيست ، قسمت كاراكترهاي كليدي اقدام در تعداد , حال مي توانيم شرايط فوق را براي يك كاراكتر در داخل پرانتز تعريف نماييم و بعد از پرانتز(بعد از پرانتز) از علامتهاي زير استفاده كنيم تا تعداد كاراكترها براي تكرار تعريف شوند , البته در صورتي كه يك شرط فقط داشته باشيم مي توانيم از پرانتز استفاده ننماييم
- ** بررسي شرط تعريف شده براي هيچ كاراكتر تا هر تعداد كاراكتر
- + بررسي براي حداقل يك كاراكتر(يعني اگر كاراكتري يافت نشود مقدار غلط را بر ميگرداند)
- ? بررسي براي فقط يك كاراكتر يا هيچ كاراكتر
- {m} بررسي براي فقط ام تعداد كاراكتر
- {m,} بررسي براي حداقل ام تعداد كاراكتر
- {m,n} بررسي براي حداقل ام و حداكثر ان تعداد كاراكتر
ضمناً جهت دیدن انواع و اقسام این علامت ها به سایت زیر رفته تا اطلاعات خود را در این ضمینه گسترش دهید
مثال بررسی شماره موبایل
(\+98|0)?9\d{9}
توسط تکه کد زیر شما میتونید مطمئن شوید کاربر شماره موبایلی با فرمت واقیرو برای شما ارسال کرده این شماره میتونه به 98+ شروع شه که اگر با این کارکتر شروع شود دیگر 0 نمیخواهد و حتی میتونه با 0 شروع شه که اگر این چنین باشد دیگر نمیتواند با 98+ شروع شود در ادامه شماره موبایل های کشور عزیزمون ایــــران پس از این کارکتر ها عدد 9 رو به همراه داره که وجودش اجباری هست سپس 9 کارکتر دیگه که میتونه از 0 تا 9 باشه در شماره موبایل باید باشه.
مثال:بررسي يك ايميل
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,3})$/
حداقل يك كاراكتر استاندارد - پرانتزباز فقط يك كاراكتر نقطه يا دش ميتواند باشد يا نباشد كه بعدش حداقل يك كاراكتراستاندارد باشد پرانتزبسته- كل پرانتز قبلي ميتواند براي چند بار تكرار شود يا نشود, كاراكتر ات ساين كه حتما فقط يكي باشد - حداقل يك كاراكتر استاندارد باشد - پرانتزباز فقط يك كاراكتر نقطه يا دش ميتواند باشد يا نباشد كه بعدش حداقل يك كاراكتر استاندارد باشد پرانتز بسته ، پرانتز قبل مي تواند براي چند بار تكرار شود يا نشود - پرانتزباز فقط يك كاراكتر نقطه كه بعدش بين يك تا سه كاراكتر استاندارد باشد - پرانتزبسته
بنابراين مثال های زیر طبق کد بالا میتواند صحیح یا غلط باشد
- fa_khanlari@yahoo.com صحيح
- fa_khanlari@yahoo.com.co صحيح
- fa_khanlari@yah-oo.com صحيح
- fa_ khanlari @yahoo-.com غلط
- fa_ khanlari @yahoo.coma غلط
- fa_ khanlari @-yahoo.com غلط
- \r بازگشت خطي - كاربرد كمي دارد اما به جاي خود مهم است
- \cX كاراكتر كنترل ايكس است
- \b داخل براكت براي محدوديت لغت
- \B داخل براكت براي عدم محدوديت لغت
- \F براي فرم
- \v تب عمودي
ابتدا یک Text Box با نام TextEmail در فرم ایجاد کنید سپس میتوانید در رویداد کلیک button تکه کد زیر رو قرار بدید
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(TextEmail.Text))
{
MessageBox.Show("یک ایمیل معتبر وارد کنید","Error");
}
if (System.Text.RegularExpressions.Regex.IsMatch(TextEmail.Text, @"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$"))
{
chkEmail.Text = " ايميل معتبر است";
// ResultEmail.Text = "ايميل معتبر است";
}
else
{
chkEmail.Text = " ايميل معتبر نيست";
// ResultEmail.Text = "ايميل معتبر نيست";
}
}
ببینید دوست من تمامی سرویس دهنده های ایمیل مثل گوگل ،یاهو، هات میل و .... ایمیل ها رو در بانک اطلاعاتی شون ذخیره میکنن که میفهمه که ایمیل farhad@fr.com صحیح هست یا خیر ، هیچ کسی جز همون سرویس دهنده که در دیتا بیس خودش میگرده و ایمیل مورد نظر رو پیدا میکنه نمیدونه ایمیل معتبر هست یا خیر، البته اگر راهی هم هست برای این موضوع بنده اطلاعای ندارم، تمامی ایمیل ها در جای هستند که عموم کاربران و حتی برنامه نویسان بهش دسترسی ندارند مگر همون سرویس دهنده ، پس پیشنهاد میشه شما کنترل کنید کاربر حداقل کارکتر درستی رو توی دیتا بیس شما وارد کنه ، من خودم گاهی اوقات برای اینکه مثلاً در نرم افزاری ایمیل ثبت کنم برای رجیستر کردن نرم افزار اگر ببینم با کارکتر های غیر واقعی قبول نمیکنه(چون برخی از نرم افزار ها هم این قابلیت رو برای رجستر شدن خودشون قرار دادن) خیلی راحت میام قوائد رو رعایت میکنم و تایپ میکنم as@as.com در این صورت شک ندارم که برنامه به درستی کارمو راه مینداره البته برخی از جاها رو دیدم که اسم تمام سرویس دهنده ها رو بعد از کارکتر @ اوردن و شما فکر میکنید که حتماً باید به درستی وارد کنید ولی کدشون رو که نگاه کنید میبینید که شما رو مجبور کردند بعد از کارکتر @ حتماً یکی از کلمات yahoo,gmail,hotmail,live,msn,aol,ymail,outlook و ... رو بیارید خب شاید کمی این روش عاقلانه تر باشه و درصد کاربرانی که مجبور هستند درست وارد کنند بیشتر از قبل میشه .
موفق باشید.
سلام . خیلی ممنون . یه سوال داشتم چه طوری میشه که از وجود خود ایمیل وارد شده هم اطمینان پیدا کنیم . چه روش هایی در این زمینه وجود دارد ؟