בדוק את כתובת הדוא"ל עם 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 = "כתובת דוא"ל". אם יש לך את ספריית 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})+$/;
    $$ ('. כתובת דוא"ל'). כל אחד (פונקציה (דוא"ל) {
    אם (! filter.test (email.value)) {
    התראה (? אנא ספק כתובת דוא"ל תקפה?);
    דוא"ל. פוקוס;
    תקף = שקר;
    }
    });
    החזרה תקפה;

  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}$

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

  11. 18

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

  12. 19
  13. 20

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

    function validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._- ]+@ [aa- zA-Z0-9.
    להחזיר emailPattern.test (id);

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

  14. 21
  15. 22
  16. 23

    תודה, אבל יש שגיאה ב regex זה. אני לא מומחה ב- Regex, אבל ניסיתי דוא"ל:

    מבחן מבחן

    וזה עבר את ה- regex ... שמתי לב שהוא חסר בריחה מה- "." כך צריך להיות:

    /^([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._- ]+@ [aa- zA-Z0-9.
    להחזיר emailPattern.test (id);

    }

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

    בברכה,

    פדריקו

  20. 29

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

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

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

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

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

  21. 30

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

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

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

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

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

  22. 31

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

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

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

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

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

  23. 32

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

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

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

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

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

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

מה אתה חושב?

אתר זה משתמש Akismet כדי להפחית דואר זבל. למד כיצד הנתונים שלך מעובדים.