בדוק את כתובת הדוא"ל עם JavaScript וביטויים רגולריים

לפני זמן מה הנחתי א בודק חוזק סיסמאות באמצעות JavaScript וביטויים רגולריים. באותה הערה, תוכלו לבדוק גם את מבנה כתובת הדוא"ל תוך שימוש באותה מתודולוגיית הביטוי הרגולרי (regex).

אם לאלמנט הטופס שלך יש את id = ”כתובת דוא"ל” ואתה מוסיף טופס onSubmit = ”החזר 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)) {
    alert(?אנא ספק כתובת דוא"ל חוקית?);
    email.focus;
    חוקי = שקר;
    }
    });
    החזר תקף;

  2. 5
  3. 7

    אני אוהב את הרעיון, אבל הייתי מהסס לאמץ את הביטוי הרגולרי המסוים הזה בלי לתאר אילו כתובות אימייל חוקיות הוא אינו מקבל ואילו כתובות לא חוקיות הוא מתיר.

    לדוגמא לביטוי רגולרי שעושה עבודה ראויה לצד הסבר אילו מקרים הוא אינו מכסה, ראה זאת:

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

    ההעדפה האישית שלי היא לכסות את רוב המקרים הפשוטים ולהוציא אזהרה על כל השאר במקום לדחות זאת. אם בוב באמת רוצה להגיש bob@com.museum ולא bob@museum.com, למה לא לתת לו?

    • 8

      היי רג,

      אתה יכול לבדוק את ה-Regex באמצעות א בודק רגקס מקוון.

      כמו כן, בהחלט יש הרבה יותר שניתן לעשות אם אתה רוצה להבטיח כתובת הדוא"ל תקף בהתאם ל-RFC.

      יש כמה סיבות לא לאפשר למישהו להזין כתובת אימייל לא חוקית:
      1. הם יתעצבנו עליך כשהמייל שהם ציפו לא יעבור - בלי קשר לשאלה אם זו הייתה אשמתך או לא שהכתובת הוזנה בצורה לא נכונה.
      2. אם com.museum היה דומיין חוקי, נניח, Yahoo! הפעיל אותו - לכל כתובת דוא"ל שתוקפץ תהיה השפעה שלילית על המוניטין של החברה שלך במשלוח דוא"ל. זה עלול להוביל לחסימת כל האימייל של החברה שלך.
      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
  8. 13
  9. 16
  10. 17

    רק תיקון קטן: לביטוי הרגולרי יש תוספת ()+ בסוף. זה צריך לקרוא:

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

    עם הראשון יתקבלו TLDs בכל אורך (וזה לא שגוי מהותית כפי שאחרים ציינו, אבל אם זו הייתה הכוונה ניתן היה לקצר את הביטוי).

  11. 18

    האם תוכל בבקשה להסביר את הביטוי הרגולרי של קוד זה וכיצד הוא פועל? גם לגבי .test - האם .test היא הצהרת ברירת מחדל ב-javascript כדי לבדוק דברים כמו שעשית בקוד למעלה?

  12. 19
  13. 20

    זהו קוד קצר לביטוי אימייל-

    function validateEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    return emailPattern.test(id);

    }
    דיפאק ראי
    ואראנאסי

  14. 21
  15. 22
  16. 23

    תודה, אבל יש שגיאה בביטוי הרגולרי הזה. אני לא מומחה רגקס, אבל ניסיתי אימייל:

    מבחן מבחן

    וזה עבר את הביטוי הרגולרי... שמתי לב שחסר לו לברוח מה"." אז זה צריך להיות:

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

  17. 24
  18. 27

    ובכן, זו רק בדיקה גסה אבל לא מדויקת ב-100%, למשל זה יהיה בסדר john_doe.@gmail.com שהיא למעשה לא כתובת דואר אלקטרוני חוקית (נקודה אסורה בתור תו אחרון בחלק המקומי של הדואר האלקטרוני).
    גם זה יקבל john…doe@gmail.com וזה גם פסול שכן לא יכול להיות יותר מנקודה אחת ברצף.

    אלו רק כמה פגמים ששמתי לב אליהם ממבט ראשון.
    הכוונה שלי היא לא רק להצביע על כך למקרה שמישהו מתכנן להשתמש בזה כבדיקה ביטחונית - לא מאובטח מספיק.

    למידע על כתובות דואר אלקטרוני חוקיות בדוק את זה: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    דיפק,

    למעשה, אני חושב שאתה צריך להחיל בריחה עבור הנקודה ("."). אז, הפונקציה שלך צריכה להיות, במקום זאת:

    function validateEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    return emailPattern.test(id);

    }

    אחרת, המשמעות של הנקודה תהיה "כל דמות". אני מאמין שצריך לברוח מדמויות מיוחדות כאלה.

    בברכה,

    פדריקו

  20. 29

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value); // הערך של שדה עם רווח לבן חתוך
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "הזן את כתובת הדוא"ל שלך") {

    error = "אנא הזן את כתובת הדוא"ל שלך.n";
    } else if (!emailFilter.test(tfld)) { //test email עבור תווים לא חוקיים

    error = "אנא הזן כתובת דוא"ל חוקית.n";
    } else if (fld.value.match(illegalChars)) {

    error = "אנא הזן כתובת דוא"ל חוקית.n";
    }
    שגיאת החזרה;
    }

  21. 30

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value); // הערך של שדה עם רווח לבן חתוך
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "הזן את כתובת הדוא"ל שלך") {

    error = "אנא הזן את כתובת הדוא"ל שלך.n";
    } else if (!emailFilter.test(tfld)) { //test email עבור תווים לא חוקיים

    error = "אנא הזן כתובת דוא"ל חוקית.n";
    } else if (fld.value.match(illegalChars)) {

    error = "אנא הזן כתובת דוא"ל חוקית.n";
    }
    שגיאת החזרה;
    }

  22. 31

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value); // הערך של שדה עם רווח לבן חתוך
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "הזן את כתובת הדוא"ל שלך") {

    error = "אנא הזן את כתובת הדוא"ל שלך.n";
    } else if (!emailFilter.test(tfld)) { //test email עבור תווים לא חוקיים

    error = "אנא הזן כתובת דוא"ל חוקית.n";
    } else if (fld.value.match(illegalChars)) {

    error = "אנא הזן כתובת דוא"ל חוקית.n";
    }
    שגיאת החזרה;
    }

  23. 32

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value); // הערך של שדה עם רווח לבן חתוך
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "הזן את כתובת הדוא"ל שלך") {

    error = "אנא הזן את כתובת הדוא"ל שלך.n";
    } else if (!emailFilter.test(tfld)) { //test email עבור תווים לא חוקיים

    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 כדי להפחית דואר זבל. למד כיצד הנתונים שלך מעובדים.