چند وقت پیش من یک قرار داده است جستجوگر قدرت رمز عبور با استفاده از JavaScript و عبارات منظم. در همان یادداشت ، می توانید ساختار آدرس ایمیل را با استفاده از همان روش بیان منظم (regex) بررسی کنید.
اگر عنصر فرم شما دارای id = "آدرس ایمیل" و شما یک فرم اضافه می کنید onSubmit = ”check checkEmail ()؛"، این یک تابع Javascript است که اگر آدرس ایمیل ساختار معتبری دارد یا نه می توانید از آن برای بازگرداندن هشدار استفاده کنید:
function checkEmail() { var email = document.getElementById('emailaddress'); var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (!filter.test(email.value)) { alert('Please provide a valid email address'); email.focus; return false; } }
این عملکرد محتوای ایمیل را به فیلتر صحیح می کند. اگر مقایسه ناموفق باشد ، هشدار ظاهر می شود و تمرکز را به قسمت آدرس ایمیل برمی گرداند!
برای فرم هایی با چندین آدرس ایمیل، بهتر است class=”emailaddress” را انجام دهید. اگر کتابخانه prototype.js را دارید (http://www.prototypejs.org) موجود در صفحه شما می توانید کاری شبیه به این انجام دهید:
var valid = true;
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
$$('.emailaddress').each( function(email) {
if (!filter.test(email.value)) {
هشدار(؟لطفا یک آدرس ایمیل معتبر ارائه دهید؟);
email.focus;
معتبر = نادرست؛
}
})؛
بازگشت معتبر
متشکرم اد! من باید در مورد کلاس ها و جاوا اسکریپت بیشتر یاد بگیرم!
نمونه اصلی داگ باحال بود، اما این یکی انجماد است! نمیدانستم که میتوانید عناصری را که دارای یک کلاس هستند به این شکل پردازش کنید، و نحو عملکردی آن شیرین است.
آده و تیمش شگفت انگیز هستند!
خیلی خوب، من همیشه می توانم روی شما برای چند اسکریپت خوب حساب کنم! 🙂
ممنون تونی!
من از این ایده خوشم میآید، اما در اتخاذ این عبارت منظم بدون توضیح اینکه کدام آدرسهای ایمیل قانونی را نمیپذیرد و کدام آدرسهای غیرقانونی را مجاز میداند، مردد هستم.
برای مثالی از یک عبارت منظم که کار مناسبی را در کنار توضیح مواردی که پوشش نمی دهد انجام می دهد، به این نگاه کنید:
http://www.regular-expressions.info/email.html
ترجیح شخصی من این است که بیشتر موارد ساده را پوشش دهم و برای هر چیز دیگری اخطار بدهم تا اینکه آن را رد کنم. اگر باب واقعاً میخواهد ارسال کند bob@com.museum به جای bob@museum.com، چرا به او اجازه نمی دهید؟
سلام رگ،
می توانید Regex را با استفاده از یک تست کنید تستر Regex آنلاین.
همچنین، اگر میخواهید اطمینان حاصل کنید، قطعاً کارهای بیشتری میتوان انجام داد آدرس ایمیل مطابق با RFC معتبر است.
چند دلیل وجود دارد که به کسی اجازه نمی دهید آدرس ایمیل نامعتبر را وارد کند:
1. زمانی که ایمیلی که انتظار داشتند دریافت نشود، از دست شما عصبانی می شوند – صرف نظر از اینکه آدرس اشتباه وارد شده اشتباه شما بوده یا خیر.
2. اگر com.museum یک دامنه معتبر بود و مثلا یاهو! آن را اجرا کرد - هر آدرس ایمیلی که بازگردانده شود، تأثیر منفی بر شهرت شرکت شما برای تحویل ایمیل خواهد داشت. این می تواند منجر به مسدود شدن تمام ایمیل های شرکت شما شود.
3. اگر ارائه دهنده خدمات ایمیل شما به شما اجازه ورود داده است bob@com.museum، همچنین باید برای هر ایمیل ارسال شده به آن آدرس ایمیل پرداخت کنید تا زمانی که آنها اشتراک آن آدرس را به دلیل پرش لغو کنند. من از هر ESP که اجازه چنین آدرس ایمیل نامعتبری را می دهد دوری می کنم - آنها فقط پول شما را می گیرند!
متشکرم برای متوقف کردن!
داگ
عالی، همان چیزی که من نیاز داشتم!
راه بسیار ساده تری برای نوشتن عبارت وجود دارد:
var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
– با اصلاح کننده نهایی /i نیازی به نشان دادن محدوده حروف بزرگ نیست.
- من هیچی را نمی شناسم TLD با اعداد در آن
در یک نکته جانبی، من TLD را با حداکثر 6 کاراکتر مجاز میدانم. موارد جدید مرتباً میرسند و شما هرگز نمیدانید (خب، میدانم که برخی از آیندهها ممکن است حتی اعدادی داشته باشند).
سلام،
من سعی می کنم از این به شکل موجود در زمان واقعی استفاده کنم، اما به نظر نمی رسد که در زمان واقعی مانند بررسی کننده قدرت رمز عبور شما اعتبارسنجی شود…
یا، آیا من آنقدر بی خبرم، و این برای من کار نمی کند؟
btw، من واقعاً آنچه را که در اینجا انجام می دهید دوست دارم، آموزش های شما بسیار ساده است، من قطعاً این یکی را نشانه گذاری خواهم کرد….
فقط یک FYI. من راه حل Ade را امتحان نکرده ام، اما الگوی بالا آدرس های ایمیل با حروف آپستروف در آنها را تایید نمی کند. (مثلا Mike.O'Hare@Whatever.com). آپاستروف ها بر اساس RFC 2821/2822 -> معتبر هستند http://www.faqs.org/rfcs/rfc2822.html
HTH ،
سانجی
همچنین به نظر نمی رسد که کاراکتر مثبت را کنترل کند، که معتبر است.
نگاه کنید به: http://www.dominicsayers.com/isemail/
در یک نکته بزرگتر، این یک مشکل کلیدی در مورد برش و چسباندن کد است، مشکلی که به خودی خود مستحق بحث کامل است.
@robbyslaughter.com
تو خجالتی هستی..
خوب کار میکنه..!@
اگر بتوانیم راه حلی برای جلوگیری از آدرس های ایمیل جعلی در نظرات در وردپرس پیدا کنیم، خوب است
فقط یک اصلاح کوچک: عبارت منظم یک ()+ اضافی در پایان دارد. باید خوانده شود:
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$
در مورد اول، TLD های هر طولی پذیرفته می شوند (که ذاتاً همانطور که دیگران اشاره کرده اند اشتباه نیست، اما اگر این هدف بود، عبارت می توانست کوتاه شود).
میشه لطفا بیان منظم این کد و نحوه کارش رو توضیح بدید؟ همچنین در مورد .test - آیا .test یک عبارت پیش فرض در جاوا اسکریپت برای بررسی مواردی است که در کد بالا انجام دادید؟
این یک کد کوتاه برای بیان ایمیل است-
تابع validateEmail(id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
بازگشت emailPattern.test(id);
}
دیپاک رای
وارناسي
این یک کد کوتاه برای بیان ایمیل است-
تابع validateEmail(id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
بازگشت emailPattern.test(id);
}
دیپاک رای
وارناسي
خیلی ممنون عمو این خیلی به من کمک کرد 🙂
آماندا
ممنون بابت کد
با تشکر، اما یک خطا در این regex وجود دارد. من متخصص regex نیستم، اما ایمیل را امتحان کردم:
test@test
و از regex عبور کرد... متوجه شدم که فاقد "فرار" است. پس باید باشد:
/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
من غلت زدن با
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$ /
و اطلاعات .info چطور؟
اوه لعنتی... 3 سال پیش؟ : S
خوب، این فقط یک بررسی تقریبی است اما 100٪ دقیق نیست، به عنوان مثال این مشکلی ندارد john_doe.@gmail.com که در واقع یک آدرس ایمیل معتبر نیست (نقطه به عنوان آخرین کاراکتر در قسمت محلی ایمیل مجاز نیست).
همچنین می پذیرد جان…doe@gmail.com که همچنین نامعتبر است زیرا نمی تواند بیش از یک نقطه در یک دنباله وجود داشته باشد.
اینها فقط برخی از ایراداتی است که در نگاه اول متوجه شدم.
قصد من این نیست که فقط به این نکته اشاره کنم در صورتی که کسی قصد دارد از آن به عنوان یک بررسی امنیتی استفاده کند - به اندازه کافی امن نیست.
برای اطلاعات در مورد آدرس های ایمیل معتبر این را بررسی کنید: http://en.wikipedia.org/wiki/E-mail_address
دیپک،
در واقع، من فکر می کنم باید برای نقطه (“) یک escape اعمال کنید. بنابراین، تابع شما باید به جای این باشد:
تابع validateEmail(id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
بازگشت emailPattern.test(id);
}
در غیر این صورت، نقطه به معنای "هر شخصیت" خواهد بود. من معتقدم که باید از چنین شخصیت های خاصی فرار کرد.
با احترام،
فدریکو
تابع validateEmail(fld) {
خطای var=””;
var tfld = trim(fld.value); // مقدار فیلد با فضای خالی بریده شده است
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
varilegalChars= /[(),;:\”[]]/ ;
if (fld.value == "آدرس ایمیل خود را وارد کنید") {
error = "لطفا آدرس ایمیل خود را وارد کنید.n";
} else if (!emailFilter.test(tfld)) { //تست ایمیل برای کاراکترهای غیرقانونی
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
} else if (fld.value.match(illegalChars)) {
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
}
خطای بازگشت؛
}
تابع validateEmail(fld) {
خطای var=””;
var tfld = trim(fld.value); // مقدار فیلد با فضای خالی بریده شده است
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
varilegalChars= /[(),;:\”[]]/ ;
if (fld.value == "آدرس ایمیل خود را وارد کنید") {
error = "لطفا آدرس ایمیل خود را وارد کنید.n";
} else if (!emailFilter.test(tfld)) { //تست ایمیل برای کاراکترهای غیرقانونی
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
} else if (fld.value.match(illegalChars)) {
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
}
خطای بازگشت؛
}
تابع validateEmail(fld) {
خطای var=””;
var tfld = trim(fld.value); // مقدار فیلد با فضای خالی بریده شده است
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
varilegalChars= /[(),;:\”[]]/ ;
if (fld.value == "آدرس ایمیل خود را وارد کنید") {
error = "لطفا آدرس ایمیل خود را وارد کنید.n";
} else if (!emailFilter.test(tfld)) { //تست ایمیل برای کاراکترهای غیرقانونی
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
} else if (fld.value.match(illegalChars)) {
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
}
خطای بازگشت؛
}
تابع validateEmail(fld) {
خطای var=””;
var tfld = trim(fld.value); // مقدار فیلد با فضای خالی بریده شده است
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
varilegalChars= /[(),;:\”[]]/ ;
if (fld.value == "آدرس ایمیل خود را وارد کنید") {
error = "لطفا آدرس ایمیل خود را وارد کنید.n";
} else if (!emailFilter.test(tfld)) { //تست ایمیل برای کاراکترهای غیرقانونی
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
} else if (fld.value.match(illegalChars)) {
error = "لطفا یک آدرس ایمیل معتبر وارد کنید.n";
}
خطای بازگشت؛
}
تریم (های) عملکرد
{
return s.replace(/^s+|s+$/, ”);
}
تریم (های) عملکرد
{
return s.replace(/^s+|s+$/, ”);
}
".focus" یک تابع است، باید باشد:
email.focus()
".focus" یک تابع است، باید باشد:
email.focus()
عالی
مانند Gem کار می کند.. استفاده عالی از عبارات reg در جاوا اسکریپت…
این یک شکاف در گوهر است…
آدرس “mmm@mmm..com” پذیرفته خواهد شد. اما دو نقطه با هم معتبر نیست.
دوستان، استفاده کنید. به هیچ اعتبار JS نیاز ندارد.
اما فقط با مرورگرهای مدرن کار می کند. متأسفانه، جهان هنوز به این نتیجه نرسیده است. -
از صندوق پستی برای iPhone ارسال شده است