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

آموزش بررسی صحت ایمیل و شماره موبایل با Regular Expression

برای ایجاد این قابلیت و حتی کنترل داده های دیگر شما میتونید از تکنیک Regular Expression یا عبارات با قائده استفاده کنید در ادامه این تکنیک رو توضیح میدم و سپس مثال عملی رو خدمتتون میگم ، یک سری کارکتر هایی هست که به تنهایی معنی نمیده ولی وقتی در کلاس System.Text.RegularExpressions.Regex.IsMatch قرار میگیرند از اهمیت برخوردار میشوند شاید کمی حفط کردنش سخت باشه ،ضمناً شاید یکی از مشکلترین کارهایی که به خصوص برنامه نویس ها با اون سر و کار دارند، ایجاد Regular Expressions جهت استفاده در برنامه ها هست.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
از کجا متوجه شویم قالب ایمیل درست است؟ از کجا متوجه شویم قالب شماره تلفن وارد شده در یک فیلد درست است؟ اگر شما نیز صاحب وبسایتی هستید ، حتماً برای ثبت نام کاربرانتان فیلد ایمیل باید پر شود ، و به علت اهمیت وجود صحیح ایمیل کاربران باید یک ایمیل معتبر وارد کنند اما برنامه نویسان چه کمکی میتوانند به صاحبان وبسایت ها کنند؟ اگر یک ایمیل را دلخواه و به قول خودمون الکی وارد کنند چه مکانیزمی برای کنترل صحیح بودن ایمیل وجود دارد ؟
جواب این است هیچ مکانیزمی وجود ندارد ولی برنامه نویسان فقط میتوانند کنترل کنند که ایمیل به صورت صحیح تایپ شود یعنی علامت @ حتماً داشته باشد وجود یک دات (.) برای ایمیل ضروری است و اینکه کجا این دات باشد مهم است مثلاً در ابتدای یک ایمیل هیچگاه کارکتر دات نمیتواند باشد یا کارکتر آندرلاین ( _ ) نمیتواند قبل از com. باشد و انواع روش هایی که میشود کنترل کرد این ایمل صحیح وارد شده باشد ، فیلد ایمیل برای مدیران سایت ها از اهمیت خاصی برخوردار است در تبلیغات وبسایتشان یا پیام های خصوصی یا وجود یک شخص به صورت حداقل حقیقی و... به هر حال شما حتماً وجود ایمیل را در وبسایت خود نیاز دارید.
اگر میخواهید رسم این نمودار ها را ببینید و به صورت آنلاین با این تکنیک کار کنید لینک زیر میتواند برای شما مفید واقع گردد ، اکثر دانشجویان رشته کامپیوتر میدانند عبارات منظم یا (Regular Expressions) چیست و یه چه درد میخورد عبارات منظم مخصوصاً در رشته برنامه نویسی از اهمیت بالایی برخوردار است و حتماً میدانند این عبارات برای تعریف الگو در رشته ها به کار می روند . کاربرد این الگوها بیشتر در validation یا تعیین اعتبار سنجی رشته ها است.
به عنوان مثال فرض کنید که در فرم ثبت نام در سایت خود مثلاً شما میخواهید کاربر شماره موبایل خود را وارد کند و میخواهید حداقل کنترل کنید که شماره موبایل خودش رو به صورت 11 کارکتر وارد کند و اصلاً کارکتر حرفی وارد نکند . برای تشخیص این که آیا عبارتی که کاربر به عنوان شماره موبایل وارد کرده است فرمت درست را دارد یا نه می توانید از عبارات منظم استفاده کنید.

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

  • / آغاز و پايان توضيح قاعده اي (همیشه شروع و پایان توضیح های با قائده با کارکتر اسلش میباشد)
  • ^ آغاز توضيح پيشرفته (در ابتدای عبارات پیچیده باقائده وجود این کارکتر الزامی است)
  • $ پايان توضيح پيشرفته (زمانی که از ^ استفاده شود در انتهای عبارت وجود دالر یا $ الزامی است)

نكته : اگر كاراكتري را خارج از توضيح پيشرفته قرار دهيم آنگاه حتي يك عدد از آن كاراكتر هم اگر در هر جا از رشته اصلي يافت شود مقدار صحيح را بر مي گرداند.

  • . ( دات ) معادل يك كاراكتر تعريف نشده يا مجهول
  • \ براي قرار دادن نقطه از بك اسلش نقطه استفاده مي كنيم(هر گاه خواستید از دات برای عبارات باقائده استفاده کنید ملزم به استفاده از بک اسلش \ هستید)

تعاريف زير فقط براي يك كاراكتر شرط مي گذارند اما مي توانيم بعدا بوسيله كاراكترهاي اقدام در تعداد آنها را گسترش دهيم

  • \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 تب عمودي
بررسی صحت ایمیل توسط regular expression

ابتدا یک 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 = "ايميل معتبر نيست";
            } 
   }

فرهاد خانلری
فرهاد خانلری

کارشناس ارشد شبکه مایکروسافت

فرهاد خانلری ، مدرس شبکه و برنامه نویسی مبتنی بر زیرساخت های مایکروسافت ، سابقه فعالیت در موسسات و مراکز دولتی در قالب پروژه ، مشاوره و تدریس ، برنامه نویسی ++C ، سی شارپ و دات نت ، متخصص و مدرس شبکه های مبتنی بر سیستم عاملهای مایکروسافت و سرویس های مربوطه ، سخت افزار و ...

نظرات