ולידציה של מיילים
-
חיפשתי בגוגל בנושא הנ"ל, ולא מצאתי לי מנוח..
ראיתי כאן כל מיני שיטות איך לעשות ולידציה לכתובת מייל.
היו שהמליצו על אימות עם ביטויי regex (וכל אחד יש לו ביטוי שאינו דומה לחברו...)
והיו שהמליצו על שימוש במחלקה MailAddress של system.net.mail
השאלה האם יש איזו דרך מקובלת או מומלצת?
או שיש ביטוי מסויים פשוט שעונה על רוב האפשרויות, לדוג' לכאו' הביטוי הזה מספיק, לא?^[A - Z0 - 9._ % +-] +@[A-Z0-9.-]+\.[A-Z]{2,6}$
תודה רבה ושבת שלום!!
פורסם במקור בפורום CODE613 ב28/08/2015 15:50 (+03:00)
-
לדעתי הדרך שהבאת בקישור היא הדרך הכי טובה
bool IsValidEmail(string email) { try { var addr = new System.Net.Mail.MailAddress(email); return addr.Address == email; } catch { return false; } }
וזאת משום שאם תסתכל בקוד מקור של המחלקות MailAddress ו MailAddressParser תראה שהבדיקה של המייל נעשית בצורה מאוד יסודית.
פורסם במקור בפורום CODE613 ב28/08/2015 15:56 (+03:00)
-
באתר הזה תגלה את כל הקוד מקור
אתה יכול גם להוריד את כל הפרימוורק למחשב שלךסליחה על הבורות...
אבל מה הכוונה להוריד את הפרימוורק? הרי הוא מותקן לי במחשב בלעדיו התוכנות לא היו רצות, לא?
או שאתה מתכוון שאני יכול להוריד את כולו בתור קבצי טקסט?פורסם במקור בפורום CODE613 ב28/08/2015 16:11 (+03:00)
-
לדעתי הדרך שהבאת בקישור היא הדרך הכי טובה
bool IsValidEmail(string email) { try { var addr = new System.Net.Mail.MailAddress(email); return addr.Address == email; } catch { return false; } }
וזאת משום שאם תסתכל בקוד מקור של המחלקות MailAddress ו MailAddressParser תראה שהבדיקה של המייל נעשית בצורה מאוד יסודית.
ממש מוזר :?: :?:
אני מקליד את כתובת המייל הזאת: "אברהם@אברהם" ומקבל תשובה חיובית..פורסם במקור בפורום CODE613 ב30/08/2015 16:27 (+03:00)
-
כתבתי כך:
static void Main(string[] args) { var b = ValidationEmail.IsValidEmail("אברהם@אברהם"); Console.WriteLine(b); }
וקיבלתי true.
והקוד של המתודה:public static bool IsValidEmail(string email) { try { MailAddress ma = new MailAddress(email); return ma.Address == email; } catch { return false; } }
מעניין איך אתה מימשת? ומדוע יש הבדלים..
פורסם במקור בפורום CODE613 ב30/08/2015 18:09 (+03:00)
-
-
הנה
ממש מוזר :?: :?:
אני מריץ את הקובץ שלך אצלי במחשב (ויזואל סטודיו 2015)
והתוצאה שאני מקבל בקונסול היא: True
ללא שום שגיאה..
אולי יש הבדל בין הגרסאות של הפריימוורק שלנו כך שבחדשים יותר זה נהיה חוקי???
(או שאני מקשקש שטויות...)פורסם במקור בפורום CODE613 ב30/08/2015 18:53 (+03:00)
-
עשיתי דיבוג ברפלקטור בדוטנט 4
וכן דיבוג ברפלקטור בדוטנט 4.6 במחשב וירטואלי להלן ההבדליםהפונקציה שזורקת את החריג בדוטנט 4 היא זו:
internal static int ReadReverse(string data, int index) { int num = index; while (0 <= index && (int)data[index] <= MailBnfHelper.Ascii7bitMaxValue && (data[index] == MailBnfHelper.Dot || MailBnfHelper.Atext[(int)data[index]])) { index--; } if (num == index) { throw new FormatException(SR.GetString("MailHeaderFieldInvalidCharacter", new object[] { data[index] })); } if (data[index + 1] == MailBnfHelper.Dot) { throw new FormatException(SR.GetString("MailHeaderFieldInvalidCharacter", new object[] { MailBnfHelper.Dot })); } return index; }
בדוטנט 4.6 הכל אותו דבר חוץ מהשורה באה:
while (0 <= index && ((int)data[index] > MailBnfHelper.Ascii7bitMaxValue || data[index] == MailBnfHelper.Dot || MailBnfHelper.Atext[(int)data[index]]))
יש פה הוספה, החלפה, החלפה, ומחיקה.
ולכן הוא מחזיר אמת במקום שקר
כך שלסיכום אכן יש פה באג לכאורא בדוטנט החדש...פורסם במקור בפורום CODE613 ב30/08/2015 19:46 (+03:00)
-
יש דרך לעדכן אותם בבאג הזה???
וחוצמיזה לא בדיוק הבנתי מה הולך בקוד הזה :shock: :shock:
מה בדיוק הוא מנסה לעשות..
אני כנראה ממש בור ועם הארץ.. אשמח אם יהיה לך כוח להסביר..
או שבשביל זה צריך לקרוא את הקוד של הפריימוורק??פורסם במקור בפורום CODE613 ב30/08/2015 20:41 (+03:00)
-
לא הבנתי אותך, גם לפי התקן הזה יש לאחר השטרודל מילה ואז נקודה ועוד מילה
לא, זה לא נכון בשום תקן. מעשית אתה צודק, אבל דוט נט לא יכול לעשות לך שגיאה כי "כמעט בטוח" שזה טעות... תיאורטית יכולה להיות לך כתובת מקומית ללא דומיין עילי (מעשי ברשתות פנימיות ועוד).
פורסם במקור בפורום CODE613 ב31/08/2015 12:19 (+03:00)