آدرس ایمیل را با JavaScript و عبارات منظم بررسی کنید

چند وقت پیش من یک قرار داده است جستجوگر قدرت رمز عبور با استفاده از 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;
}
}

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

41 نظرات

  1. 1

    برای فرم هایی با چندین آدرس ایمیل، بهتر است 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;
    معتبر = نادرست؛
    }
    })؛
    بازگشت معتبر

  2. 5
  3. 7

    من از این ایده خوشم می‌آید، اما در اتخاذ این عبارت منظم بدون توضیح اینکه کدام آدرس‌های ایمیل قانونی را نمی‌پذیرد و کدام آدرس‌های غیرقانونی را مجاز می‌داند، مردد هستم.

    برای مثالی از یک عبارت منظم که کار مناسبی را در کنار توضیح مواردی که پوشش نمی دهد انجام می دهد، به این نگاه کنید:

    http://www.regular-expressions.info/email.html

    ترجیح شخصی من این است که بیشتر موارد ساده را پوشش دهم و برای هر چیز دیگری اخطار بدهم تا اینکه آن را رد کنم. اگر باب واقعاً می‌خواهد ارسال کند bob@com.museum به جای bob@museum.com، چرا به او اجازه نمی دهید؟

    • 8

      سلام رگ،

      می توانید Regex را با استفاده از یک تست کنید تستر Regex آنلاین.

      همچنین، اگر می‌خواهید اطمینان حاصل کنید، قطعاً کارهای بیشتری می‌توان انجام داد آدرس ایمیل مطابق با RFC معتبر است.

      چند دلیل وجود دارد که به کسی اجازه نمی دهید آدرس ایمیل نامعتبر را وارد کند:
      1. زمانی که ایمیلی که انتظار داشتند دریافت نشود، از دست شما عصبانی می شوند – صرف نظر از اینکه آدرس اشتباه وارد شده اشتباه شما بوده یا خیر.
      2. اگر com.museum یک دامنه معتبر بود و مثلا یاهو! آن را اجرا کرد - هر آدرس ایمیلی که بازگردانده شود، تأثیر منفی بر شهرت شرکت شما برای تحویل ایمیل خواهد داشت. این می تواند منجر به مسدود شدن تمام ایمیل های شرکت شما شود.
      3. اگر ارائه دهنده خدمات ایمیل شما به شما اجازه ورود داده است bob@com.museum، همچنین باید برای هر ایمیل ارسال شده به آن آدرس ایمیل پرداخت کنید تا زمانی که آنها اشتراک آن آدرس را به دلیل پرش لغو کنند. من از هر ESP که اجازه چنین آدرس ایمیل نامعتبری را می دهد دوری می کنم - آنها فقط پول شما را می گیرند!

      متشکرم برای متوقف کردن!
      داگ

  4. 9
  5. 10

    راه بسیار ساده تری برای نوشتن عبارت وجود دارد:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    – با اصلاح کننده نهایی /i نیازی به نشان دادن محدوده حروف بزرگ نیست.
    - من هیچی را نمی شناسم TLD با اعداد در آن
    در یک نکته جانبی، من TLD را با حداکثر 6 کاراکتر مجاز می‌دانم. موارد جدید مرتباً می‌رسند و شما هرگز نمی‌دانید (خب، می‌دانم که برخی از آینده‌ها ممکن است حتی اعدادی داشته باشند).

  6. 11

    سلام،

    من سعی می کنم از این به شکل موجود در زمان واقعی استفاده کنم، اما به نظر نمی رسد که در زمان واقعی مانند بررسی کننده قدرت رمز عبور شما اعتبارسنجی شود…

    یا، آیا من آنقدر بی خبرم، و این برای من کار نمی کند؟

  7. 12

    btw، من واقعاً آنچه را که در اینجا انجام می دهید دوست دارم، آموزش های شما بسیار ساده است، من قطعاً این یکی را نشانه گذاری خواهم کرد….

  8. 13
  9. 16
  10. 17

    فقط یک اصلاح کوچک: عبارت منظم یک ()+ اضافی در پایان دارد. باید خوانده شود:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    در مورد اول، TLD های هر طولی پذیرفته می شوند (که ذاتاً همانطور که دیگران اشاره کرده اند اشتباه نیست، اما اگر این هدف بود، عبارت می توانست کوتاه شود).

  11. 18

    میشه لطفا بیان منظم این کد و نحوه کارش رو توضیح بدید؟ همچنین در مورد .test - آیا .test یک عبارت پیش فرض در جاوا اسکریپت برای بررسی مواردی است که در کد بالا انجام دادید؟

  12. 19
  13. 20

    این یک کد کوتاه برای بیان ایمیل است-

    تابع validateEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    بازگشت emailPattern.test(id);

    }
    دیپاک رای
    وارناسي

  14. 21
  15. 22
  16. 23

    با تشکر، اما یک خطا در این regex وجود دارد. من متخصص regex نیستم، اما ایمیل را امتحان کردم:

    test@test

    و از regex عبور کرد... متوجه شدم که فاقد "فرار" است. پس باید باشد:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  17. 24
  18. 27

    خوب، این فقط یک بررسی تقریبی است اما 100٪ دقیق نیست، به عنوان مثال این مشکلی ندارد john_doe.@gmail.com که در واقع یک آدرس ایمیل معتبر نیست (نقطه به عنوان آخرین کاراکتر در قسمت محلی ایمیل مجاز نیست).
    همچنین می پذیرد جان…doe@gmail.com که همچنین نامعتبر است زیرا نمی تواند بیش از یک نقطه در یک دنباله وجود داشته باشد.

    اینها فقط برخی از ایراداتی است که در نگاه اول متوجه شدم.
    قصد من این نیست که فقط به این نکته اشاره کنم در صورتی که کسی قصد دارد از آن به عنوان یک بررسی امنیتی استفاده کند - به اندازه کافی امن نیست.

    برای اطلاعات در مورد آدرس های ایمیل معتبر این را بررسی کنید: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    دیپک،

    در واقع، من فکر می کنم باید برای نقطه (“) یک escape اعمال کنید. بنابراین، تابع شما باید به جای این باشد:

    تابع validateEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    بازگشت emailPattern.test(id);

    }

    در غیر این صورت، نقطه به معنای "هر شخصیت" خواهد بود. من معتقدم که باید از چنین شخصیت های خاصی فرار کرد.

    با احترام،

    فدریکو

  20. 29

    تابع 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";
    }
    خطای بازگشت؛
    }

  21. 30

    تابع 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";
    }
    خطای بازگشت؛
    }

  22. 31

    تابع 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";
    }
    خطای بازگشت؛
    }

  23. 32

    تابع 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";
    }
    خطای بازگشت؛
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

شما چه فکر میکنید؟

این سایت از Akismet برای کاهش هرزنامه استفاده می کند. بدانید که چگونه نظر شما پردازش می شود.