ולידציה של מיילים
-
חיפשתי בגוגל בנושא הנ"ל, ולא מצאתי לי מנוח..
ראיתי כאן כל מיני שיטות איך לעשות ולידציה לכתובת מייל.
היו שהמליצו על אימות עם ביטויי 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)
-
תודה רבה!!
איך אני יכול לראות את קוד המקור שלהם? הרי בדרך כלל בספריה של msdn הם מראים רק את דרך השימוש ולא את הקוד עצמו..
פורסם במקור בפורום CODE613 ב28/08/2015 16:00 (+03:00)
-
באתר הזה תגלה את כל הקוד מקור
אתה יכול גם להוריד את כל הפרימוורק למחשב שלךסליחה על הבורות...
אבל מה הכוונה להוריד את הפרימוורק? הרי הוא מותקן לי במחשב בלעדיו התוכנות לא היו רצות, לא?
או שאתה מתכוון שאני יכול להוריד את כולו בתור קבצי טקסט?פורסם במקור בפורום CODE613 ב28/08/2015 16:11 (+03:00)
-
כן אתה יכול להוריד את כל הקוד מקור של כולו, זה מאוד נפלא לעבור על זה.
פורסם במקור בפורום CODE613 ב28/08/2015 16:45 (+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)
-
דווקא אני קיבלתי את השגיאה הבאה
An invalid character was found in the mail header: 'ם'.
השתמשתי כך:
static void Main(string[] args) { var b = IsValidEmail("אברהם@אברהם"); } פורסם במקור בפורום CODE613 ב30/08/2015 17:25 (+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פורסם במקור בפורום CODE613 ב30/08/2015 19:22 (+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)
-
נכון, כי בפועל ה DLL של 4.6 הוא זה שרץ
אני עשיתי יותר מזה, קימפלתי את התוכנה במחשב הרגיל בדוטנט 4 ואז העתקתי אותו לוירטואלי לדוטנט 4.6 והוא החזיר אמת.פורסם במקור בפורום CODE613 ב30/08/2015 21:26 (+03:00)
-
תשמעו, זה לא באג, זה פשוט יכול להיות תקני... לפי התקן SMTPUTF8 (שכרגע אף אחד לא חושב לממש אותו כנראה) אז אפשר... ראו כאן: https://en.wikipedia.org/wiki/International_email.
פורסם במקור בפורום CODE613 ב30/08/2015 21:47 (+03:00)
-
לא הבנתי אותך, גם לפי התקן הזה יש לאחר השטרודל מילה ואז נקודה ועוד מילה
פורסם במקור בפורום CODE613 ב30/08/2015 21:50 (+03:00)
-
לא הבנתי אותך, גם לפי התקן הזה יש לאחר השטרודל מילה ואז נקודה ועוד מילה
לא, זה לא נכון בשום תקן. מעשית אתה צודק, אבל דוט נט לא יכול לעשות לך שגיאה כי "כמעט בטוח" שזה טעות... תיאורטית יכולה להיות לך כתובת מקומית ללא דומיין עילי (מעשי ברשתות פנימיות ועוד).
פורסם במקור בפורום CODE613 ב31/08/2015 12:19 (+03:00)
12/23