לפני זמן מה הנחתי א בודק חוזק סיסמאות באמצעות 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; } }
הפונקציה מאמתת את תוכן הדוא"ל לזה של המסנן. אם ההשוואה נכשלת, היא מקפיצה התראה ומחזירה את המיקוד לשדה כתובת הדוא"ל!
עבור טפסים עם מספר כתובות דוא"ל, זה יהיה טוב לעשות 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;
חוקי = שקר;
}
});
החזר תקף;
תודה עדה! אני אצטרך ללמוד עוד קצת על שיעורים ו-JavaScript!
הדוגמה המקורית של דאג הייתה מגניבה, אבל זו מקפיאה! לא ידעתי שאפשר לעבד אלמנטים בעלי מחלקה בצורה כזו, והתחביר הפונקציונלי מתוק.
אדה והצוות שלו מדהימים!
נחמד, אני תמיד יכול לסמוך עליך בשביל כמה תסריטים מגניבים מרושעים! 🙂
תודה טוני!
אני אוהב את הרעיון, אבל הייתי מהסס לאמץ את הביטוי הרגולרי המסוים הזה בלי לתאר אילו כתובות אימייל חוקיות הוא אינו מקבל ואילו כתובות לא חוקיות הוא מתיר.
לדוגמא לביטוי רגולרי שעושה עבודה ראויה לצד הסבר אילו מקרים הוא אינו מכסה, ראה זאת:
http://www.regular-expressions.info/email.html
ההעדפה האישית שלי היא לכסות את רוב המקרים הפשוטים ולהוציא אזהרה על כל השאר במקום לדחות זאת. אם בוב באמת רוצה להגיש bob@com.museum ולא bob@museum.com, למה לא לתת לו?
היי רג,
אתה יכול לבדוק את ה-Regex באמצעות א בודק רגקס מקוון.
כמו כן, בהחלט יש הרבה יותר שניתן לעשות אם אתה רוצה להבטיח כתובת הדוא"ל תקף בהתאם ל-RFC.
יש כמה סיבות לא לאפשר למישהו להזין כתובת אימייל לא חוקית:
1. הם יתעצבנו עליך כשהמייל שהם ציפו לא יעבור - בלי קשר לשאלה אם זו הייתה אשמתך או לא שהכתובת הוזנה בצורה לא נכונה.
2. אם com.museum היה דומיין חוקי, נניח, Yahoo! הפעיל אותו - לכל כתובת דוא"ל שתוקפץ תהיה השפעה שלילית על המוניטין של החברה שלך במשלוח דוא"ל. זה עלול להוביל לחסימת כל האימייל של החברה שלך.
3. אם ספק שירותי הדוא"ל שלך איפשר לך להיכנס bob@com.museum, תשלם גם עבור כל אימייל שנשלח לכתובת דוא"ל זו עד שהם ביטלו את הרישום לכתובת זו עקב הקפצות. הייתי מתרחק מכל ESP שיאפשר כתובת דוא"ל לא חוקית כזו - הם פשוט לוקחים את הכסף שלך!
תודה שקפצת לבקר!
דאג
מושלם, בדיוק מה שהייתי צריך!
יש דרך הרבה יותר פשוטה לכתוב את הביטוי:
var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
– עם השינוי הסופי /i אין צורך לציין את טווח האותיות הגדולות.
– אני לא יודע על אף אחד TLD עם מספרים בתוכו.
הערה צדדית, אני כן מאפשר TLD עם עד 6 תווים; חדשים מגיעים באופן קבוע ואי אפשר לדעת (ובכן, ייתכן שבחלק מהעתידיים אפילו יש מספרים, אני יודע).
שלום שם,
אני מנסה להשתמש בזה בצורה קיימת בזמן אמת, אבל זה לא נראה מאמת בזמן אמת כמו בודק חוזק הסיסמאות שלך...
או שאני פשוט כל כך חסר מושג, וזה לא עובד בשבילי?
אגב, אני מאוד אוהב את מה שקורה לך כאן, ההדרכות שלך פשוטות מאוד, אני בהחלט אוסיף את הסימניות הזה...
רק לידיעתכם; לא ניסיתי את הפתרון של Ade אבל הדפוס שלמעלה לא מאמת כתובות דואר אלקטרוני עם אפוסטרופים בהן.. (למשל, Mike.O'Hare@Whatever.com). אפוסתרפים תקפים לפי RFC 2821/2822 –> http://www.faqs.org/rfcs/rfc2822.html
HTH,
סנג'אי
נראה שהוא גם לא מתמודד עם תו הפלוס, וזה תקף.
ראה: http://www.dominicsayers.com/isemail/
בהערה גדולה יותר, זוהי בעיה מרכזית עם גזירה והדבקה של קוד, כזו שראויה לדיון מלא בפני עצמה.
@robbyslaughter.com
אתה מטורף..
זה עובד בסדר..!@
יהיה בסדר אם נוכל למצוא פתרון למנוע כתובות דואר אלקטרוני מזויפות בתגובות בוורדפרס
רק תיקון קטן: לביטוי הרגולרי יש תוספת ()+ בסוף. זה צריך לקרוא:
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$
עם הראשון יתקבלו TLDs בכל אורך (וזה לא שגוי מהותית כפי שאחרים ציינו, אבל אם זו הייתה הכוונה ניתן היה לקצר את הביטוי).
האם תוכל בבקשה להסביר את הביטוי הרגולרי של קוד זה וכיצד הוא פועל? גם לגבי .test - האם .test היא הצהרת ברירת מחדל ב-javascript כדי לבדוק דברים כמו שעשית בקוד למעלה?
זהו קוד קצר לביטוי אימייל-
function validateEmail(id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
return emailPattern.test(id);
}
דיפאק ראי
ואראנאסי
זהו קוד קצר לביטוי אימייל-
function validateEmail(id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
return emailPattern.test(id);
}
דיפאק ראי
ואראנאסי
תודה רבה דוד. זה עזר לי מאוד 🙂
אמנדה
תודה על הקוד!
תודה, אבל יש שגיאה בביטוי הרגולרי הזה. אני לא מומחה רגקס, אבל ניסיתי אימייל:
מבחן מבחן
וזה עבר את הביטוי הרגולרי... שמתי לב שחסר לו לברוח מה"." אז זה צריך להיות:
/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
אני מתגלגל עם
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$ /
ומה לגבי .info's?
אוי לעזאזל... לפני 3 שנים? :S
ובכן, זו רק בדיקה גסה אבל לא מדויקת ב-100%, למשל זה יהיה בסדר john_doe.@gmail.com שהיא למעשה לא כתובת דואר אלקטרוני חוקית (נקודה אסורה בתור תו אחרון בחלק המקומי של הדואר האלקטרוני).
גם זה יקבל john…doe@gmail.com וזה גם פסול שכן לא יכול להיות יותר מנקודה אחת ברצף.
אלו רק כמה פגמים ששמתי לב אליהם ממבט ראשון.
הכוונה שלי היא לא רק להצביע על כך למקרה שמישהו מתכנן להשתמש בזה כבדיקה ביטחונית - לא מאובטח מספיק.
למידע על כתובות דואר אלקטרוני חוקיות בדוק את זה: http://en.wikipedia.org/wiki/E-mail_address
דיפק,
למעשה, אני חושב שאתה צריך להחיל בריחה עבור הנקודה ("."). אז, הפונקציה שלך צריכה להיות, במקום זאת:
function validateEmail(id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
return emailPattern.test(id);
}
אחרת, המשמעות של הנקודה תהיה "כל דמות". אני מאמין שצריך לברוח מדמויות מיוחדות כאלה.
בברכה,
פדריקו
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";
}
שגיאת החזרה;
}
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";
}
שגיאת החזרה;
}
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";
}
שגיאת החזרה;
}
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";
}
שגיאת החזרה;
}
חיתוך פונקציות
{
החזר s.replace(/^s+|s+$/, ”);
}
חיתוך פונקציות
{
החזר s.replace(/^s+|s+$/, ”);
}
ה-'.focus' הוא פונקציה, היא צריכה להיות:
email.focus()
ה-'.focus' הוא פונקציה, היא צריכה להיות:
email.focus()
מדהים
עובד כמו אבן חן.. שימוש נהדר בביטויי reg ב-javascript...
זה סדק באבן החן…
הכתובת "mmm@mmm..com" תתקבל. אבל שתי נקודות ביחד אינן תקפות.
גבעות, השתמש. זה לא דורש שום אימות JS.
אבל עובד רק עם דפדפנים מודרניים. למרבה הצער, העולם עדיין לא השיג את הפער. —
נשלח מתיבת הדואר לאייפון