از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
اعتبارسنجی آدرسهای ایمیل با عبارات منظم در جاوا اسکریپت برای توسعهدهندگان وب، اعتبارسنجی ورودیهای کاربر به اشکال مختلف از اهمیت حیاتی برخوردار است. از آنجایی که این نقطه شروع ارسال داده بین مشتری و سرور است، باید مطمئن شوید که همه چیز شروع می شود. روی پای راست – مبادا در نهایت با …
سرفصلهای مطلب
معرفی
برای توسعه دهندگان وب، اعتبارسنجی ورودی های کاربر در انواع مختلف از اهمیت بسیار زیادی برخوردار است. از آنجایی که این نقطه شروع ارسال داده بین مشتری و سرور است، باید مطمئن شوید که همه چیز شروع می شود. روی پای راست – مبادا در نهایت با اعتبارسنجی قوی مواجه شوید روی را سرور پایان، که اغلب دردسر بزرگتر از انجام آن است روی قسمت جلویی
علاوه بر این، ورودی می تواند مخرب باشد – در این صورت، باید امنیت را نیز در نظر بگیرید. بهتر است با اعتبارسنجی ورودی از آن به طور کلی اجتناب کنید روی قسمت جلویی
در این مقاله، روش اعتبارسنجی آدرس های ایمیل در جاوا اسکریپت با استفاده از Regular Expressions را بررسی خواهیم کرد.
عبارات منظم در جاوا اسکریپت
برای هر کسی که با عبارات منظم آشنا نیست، یا هر کسی که احساس می کند به یک یادآوری سریع نیاز دارد، اینجاست!
عبارات با قاعده دنباله ای از متاکاراکترها هستند که نشان دهنده a هستند الگو. این الگوها می توانند انواع مختلفی داشته باشند: ترکیبی از حروف با ارقام، کاراکترهای خاص و حتی کاراکترهای زبانی مختلف. مخفف عبارت منظم است RegEx یا RegExp.
از طریق متاکاراکترها، کمیت کننده ها، گروه ها و شخصیت های فرار – می توانید بیان تقریباً هر الگوی به عنوان مثال، این عبارت به دنباله ای از کاراکترها اشاره می کند که حاوی هر حرف معتبری بین AZ (هم کوچک و هم بزرگ) است. یا ارقام، در هر ترکیبی:
^((A-Za-z)|(0-9))+$
این همچنین به عنوان بررسی اینکه آیا یک دنباله است شناخته می شود حروف عددی.
برای بقیه راهنما، فرض می کنیم که شما تا حدودی با Regular Expressions آشنایی دارید.
اگر با عبارات با قاعده آشنا نیستید و می خواهید بیشتر بدانید – راهنمای عبارات منظم و رشته های تطبیق ما در جاوا اسکریپت را بخوانید!
تطبیق فرمت های ایمیل در جاوا اسکریپت با عبارات منظم
اول و مهمتر از همه، یک عبارت منظم که با تمام آدرس های ایمیل معتبر ممکن مطابقت دارد وجود ندارد. با این حال، یکی که مطابقت دارد 99.9٪، میکند. هنگام اعتبارسنجی ایمیل ها، یا در واقع هر ورودی، یک روش خوب، که می تواند کم و بیش تضمین کند که کاربر با RegEx مطابقت دارد، محدود کردن ورودی کاربر از قبل است.
به عنوان مثال، استفاده اجباری از gmail.com یا yahoo.com و مستقیماً ارائه دهندگان پشتیبانی نشده را رد کنید (البته، شما با مشکل مقیاس پذیری و به روز ماندن با این رویکرد مواجه می شوید).
سوال دیگری مطرح می شود:
فرمت ایمیل چیست؟
همانطور که به زودی خواهیم دید، به طور شگفت انگیزی یک تعریف ساده است – و می توانید ساده یا قوی باشید روی این. ما کلیترین عبارات منظم را برای اعتبارسنجی ایمیل، و همچنین مواردی که در راهنما مشخصتر هستند، پوشش خواهیم داد.
قبل از اینکه وارد کد شویم، بیایید قالبهای ایمیلی را که به دنبال آن هستیم، پیشنمایش کنیم:
- قالب کلی – (چیزی)@(some_domain).(some_toplevel_domain)
- هاست یا دامنه خاص – اشاره به نوع خاصی از دامنه یا دامنه سطح بالا
- RFC 5322 – فرمت پیام اینترنتی که 99.9 درصد از آدرس های ایمیل را پوشش می دهد
فرمت ایمیل عمومی عبارت منظم
پس از تلاشهای فراوان برای اعتبارسنجی با عبارات منظم قوی، بسیاری از مهندسان به قالب قدیمی و خوب «عمومی» که بیشتر اوقات کار میکند، بازمیگردند. این که آیا این چیز خوبی است یا خیر قابل بحث است.
آدرس ایمیل به چه معناست؟ باید الف داشته باشد @
نماد، و همچنین مقداری رشته قبل از آن، و مقداری رشته آن را ادامه می دهد. علاوه بر این، رشته دوم باید حاوی یک نقطه باشد که بعد از آن 2-3 کاراکتر اضافی دارد.
در پایان، این یک طرح کلی است:
(randomString)@(randomString2).(2-3 characters)
این از شهود کلی معتبر بودن این ایمیل ها پیروی می کند:
(email protected)
(email protected)
(email protected)
با در نظر گرفتن این موضوع، برای تأیید اعتبار یک آدرس ایمیل در جاوا اسکریپت از طریق عبارات منظم، ما طرح خام را به یک RegExp
:
let regex = new RegExp('(a-z0-9)+@(a-z)+\.(a-z){2,3}');
let testEmails = ("notanemail.com", "(email protected)", "(email protected)", "(email protected)");
testEmails.forEach((address) => {
console.log(regex.test(address))
});
رشته اول می تواند شامل هر کاراکتر حروف عددی کوچک باشد – john.doe.1
، workingemail
، و غیره.
این نتیجه در:
false
true
true
false
آیا این همیشه کار خواهد کرد؟ خیر وجود خواهد داشت مقداری ایمیل های نادرست که ارسال می شوند. همچنین نمیتوانید با استفاده از این عبارت منظم، تشخیص هرزنامه را انجام دهید، بنابراین آدرس ایمیلی که به طور مستقیم شبیه هرزنامه است، این عبارت را به خوبی ارسال میکند:
console.log(regex.test("(email protected)")); // true
اگرچه، حتی قویترین و پیچیدهترین عبارات اعتبارسنجی آدرس ایمیل نیز با شکست مواجه میشوند روی این – آنها برای تأیید اعتبار وجود دارند فرم، نه اینکه ایمیل وجود داشته باشد.
از نظر فنی،
(email protected)
می تواند وجود داشته باشد، پس ما چه کسی هستیم که بگوییم بر اساس آن نیست روی فقط یک عبارت منظم؟
آدرس های ایمیل خاص
کاهش میزان عدم اطمینان کمک می کند. هرچه عدم اطمینان کمتر باشد، محدودیت ها کمتر می شود شما نیاز به تحمیل با استفاده از یک عبارت این امر اعتبارسنجی آدرس ایمیل خاص را با استفاده از همان قالبهای عمومی که قبلاً دیدیم دقیقتر میکند – لازم نیست موارد لبه زیادی را پوشش دهید.
بیایید نگاهی به چند مورد کلی در رابطه با دامنه و دامنه سطح بالا بیندازیم.
اعتبارسنجی دامنه آدرس ایمیل با جاوا اسکریپت
بگویید، شما در یک شرکت به نام کار می کنید پشته سوء استفاده. همه کارکنان یک ایمیل دارند که به آن ختم می شود @rasanegar.com
و رشته کاربر همان چیزی است که تغییر می کند. طرح خشن به این صورت خواهد بود:
(randomString)@rasanegar.com
این کار ما را بسیار آسانتر میکند، زیرا برخی از متغیرها مانند نام دامنه و نوع سازمان اکنون ثابت شدهاند. این دو متغیر معمولی مشکل ساز هستند، زیرا نام دامنه می تواند متفاوت باشد وحشیانه.
بنابراین، اعتبارسنجی یک آدرس ایمیل مربوط به یک دامنه خاص، به کار آسانی تبدیل میشود RegExp
کلاس:
let regex = new RegExp('(a-z0-9)(email protected)');
let testEmails = ("notanemail.com", "(email protected)", "(email protected)");
testEmails.forEach((address) => {
console.log(regex.test(address))
});
این نتیجه در:
false
true
false
با این رویکرد، می توانید هر رشته تحت اللفظی را مطابق با نیاز خود تغییر دهید. مثل همیشه، قسمت اول عبارت منظم را می توان تغییر داد تا با حروف بزرگ، از جمله کاراکترهای خاص مانند +
یا _
، و غیره.
اعتبار سنجی دامنه های سطح بالای آدرس ایمیل در جاوا اسکریپت
این مورد تقریباً شبیه مورد قبلی است، با این تفاوت که ما دو یا سه کاراکتر آخر ایمیل را محدود خواهیم کرد.
اینها می توانند به معنای واقعی کلمه هر یک از موارد زیر باشند: .com، .org، .edu، .eu، .usو غیره. بیایید فقط ایمیل های حاوی .edu
زیرا هرگز فقط این دامنه سطح بالا نیست، بلکه چیزی شبیه به آن است (email protected)
.
let regex = new RegExp('(a-z0-9)+@(a-z)+\.edu\.(a-z){2,3}');
let testEmails = ("notanemail.com", "(email protected)", "(email protected)");
testEmails.forEach((address) => {
console.log(regex.test(address))
});
یک ایمیل نامعتبر و همچنین یک ایمیل معتبر با شکست مواجه می شوند – زیرا حاوی یک ایمیل نیستند edu
با این حال، در دامنه سطح بالای آنها، آدرس Yale ساخته شده کار می کند:
false
false
true
فرمت RFC 5322
این فرمت RFC 5322 یک قالب پیام اینترنتی (فرمت کلاسیک یک پیام ایمیل) است. RFC 5322 تنها چیزی را که باید مجاز باشد را دیکته می کند – این خود یک عبارت نیست.
عبارات متعددی وجود دارد که پیاده سازی قوانین تعیین شده، و این می تواند بسیار پیچیده باشد.
اگر به درستی اجرا شود، سازگار با RFC 5322 Regular Expression باید 99.99٪ از آدرس های ایمیل معتبر را تأیید کند.
یک نسخه کوتاه به شرح زیر است:
let regex = new RegExp("((!#-'*+/-9=?A-Z^-~-)+(\.(!#-'*+/-9=?A-Z^-~-)+)*|\"\(\(\)!#-(^-~ \t)|(\\(\t -~)))+\")@((!#-'*+/-9=?A-Z^-~-)+(\.(!#-'*+/-9=?A-Z^-~-)+)*|\((\t -Z^-~)*))");
در حالی که یک نسخه توسعه یافته که حاشیه های اضافی را پوشش می دهد عبارت است از:
(?:(a-z0-9!#$%&'*+/=?^_`{|}~-)+(?:\.(a-z0-9!#$%&'*+/=?^_`{|}~-)+)*|"(?:(\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f)|\\(\x01-\x09\x0b\x0c\x0e-\x7f))*")@(?:(?:(a-z0-9)(?:(a-z0-9-)*(a-z0-9))?\.)+(a-z0-9)(?:(a-z0-9-)*(a-z0-9))?|\((?:(?:25(0-5)|2(0-4)(0-9)|(01)?(0-9)(0-9)?)\.){3}(?:25(0-5)|2(0-4)(0-9)|(01)?(0-9)(0-9)?|(a-z0-9-)*(a-z0-9):(?:(\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f)|\\(\x01-\x09\x0b\x0c\x0e-\x7f))+)\))
درک این عبارات به خصوص آسان نیست مگر اینکه آنها را به گروه تقسیم کنید و مدتی را صرف خواندن آنها کنید. با این حال، یک راه ساده تر برای تجسم آن است:
*تصویر و ادعای صحت توسط حسن نیت ارائه شده است EmailRegex.com.
همانطور که گفته شد، اجازه دهید به جای آن از این عبارت برای تأیید اعتبار چند آدرس استفاده کنیم:
let regex = new RegExp("((!#-'*+/-9=?A-Z^-~-)+(\.(!#-'*+/-9=?A-Z^-~-)+)*|\"\(\(\)!#-(^-~ \t)|(\\(\t -~)))+\")@((!#-'*+/-9=?A-Z^-~-)+(\.(!#-'*+/-9=?A-Z^-~-)+)*|\((\t -Z^-~)*))");
let testEmails = ("notanemail.com", "(email protected)", "(email protected)");
testEmails.forEach((address) => {
console.log(regex.test(address))
});
این نتیجه در:
false
true
true
شما می توانید ادامه دهید و این عبارت را به صورت تعاملی از طریق یک رابط کاربری زیبا در تست کنید regex101.
نتیجه
در نتیجه، واقعاً یک راه “مناسب” برای اعتبارسنجی آدرس های ایمیل با استفاده از عبارات منظم وجود ندارد. با این حال، یک راه اشتباه وجود دارد – اگر مواردی را پوشش ندهید که نباید صحیح باشد.
برای کسانی که می خواهند مطمئن شوند به معنای واقعی کلمه، تقریبا همه چیز پوشیده شده است – از فرمت RFC 5322 استفاده کنید.
(برچسبها برای ترجمه)# regex
منتشر شده در 1403-01-14 22:08:04