台灣最大程式設計社群網站
線上人數
1228
 
會員總數:230874
接案會員:6779
文章總數:2320
討論主題:176338
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 如何檢查Email格式
[變換順序]
[我要回覆]


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何檢查Email格式
價值 : 20 QP  點閱數:12650 回應數:18

樓主

東東
門外漢
0 34
541 93
發送站內信

如果要檢查一個從TextBox輸入的Email,看看是否正確,應該不會是把TextBox的字串值抓出來檢查看有沒有"@",然後再檢查@後面有沒有"."吧,有沒有其他更好的方法嗎,請各位址點一下。
本篇文章發表於2009-03-17 11:52
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Jameswu
捐贈 VP 給 Jameswu 檢舉此回應
你可以使用 RegularExpressionValidator 控制項在Client先做檢查。




本篇文章回覆於2009-03-17 12:16
--未登入的會員無法查看對方簽名檔--
2樓
回應

gipi
檢舉此回應
用regular expression吧。




本篇文章回覆於2009-03-17 12:17
--未登入的會員無法查看對方簽名檔--
3樓
回應

Dreamyi
捐贈 VP 給 Dreamyi 檢舉此回應
我是這樣做:

#region "判斷字串是否為正確的電子郵件地址"
/// <summary>
/// 判斷字串是否為正確的電子郵件地址
/// </summary>
/// <param name="mailAddress">電子郵件地址</param>
/// <returns>傳回布林值</returns>
public static bool IsMailAddress(string mailAddress)
{
bool bln;
try
{
System.Net.Mail.MailAddress mail = new System.Net.Mail.MailAddress(mailAddress);
bln = true;
}
catch
{
bln = false;
}

return bln;
}
#endregion


本篇文章回覆於2009-03-17 21:52
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

東東
檢舉此回應
謝謝指導,已經試成功了。
但是我還有一個問題,承接上面,
譬如我有一個程式如mail.aspx
在mail.aspx裡有一些TextBox、DropDownList..等,
有一欄位是要輸入Email(而Email輸入格式要正確,上面的方式可以解決),
但是這樣按傳送之後就會把資料存入資料庫裡,
理論上不應該把這筆資料存入資料庫裡,
那我該如何寫呢?
是寫在.aspx呢還是寫在.aspx.vb裡呢?


本篇文章回覆於2009-03-17 22:00
--未登入的會員無法查看對方簽名檔--
5樓
回應

Mark Shu
捐贈 VP 給 Mark Shu 檢舉此回應
就用上面的方式驗證 加到按下傳送的click事件裡面
若是沒有發生錯誤 就把信寄出去 資料存入資料庫
當發生catch 時,就return; 終止程式繼續往下執行



本篇文章回覆於2009-03-17 22:06
--未登入的會員無法查看對方簽名檔--
6樓
回應

gipi
檢舉此回應
"但是這樣按傳送之後就會把資料存入資料庫裡,理論上不應該把這筆資料存入資料庫裡,"
這兩句聽起來怪怪的,您指的是格式驗證錯誤的話就不要存檔嗎?
所以看起來您的寫法是在Mail.vb中撰寫格式檢查囉?
建議在js中就將該格式檢查完畢,一來後端程式就不用多做程式判斷,二來使用者體驗也會比較好。


本篇文章回覆於2009-03-17 22:18
--未登入的會員無法查看對方簽名檔--
7樓
回應

Dreamyi
捐贈 VP 給 Dreamyi 檢舉此回應
您是要發送 e-mail?沒有附件的話最後一個參數可以不用輸入。

/// <summary>
/// 傳送電子郵件
/// </summary>
/// <param name="smtpHost">Smtp Host</param>
/// <param name="account">寄件者帳號</param>
/// <param name="password">寄件者密碼</param>
/// <param name="fromMailAddress">寄件者郵件地址</param>
/// <param name="toMailAddress">收件者郵件地址</param>
/// <param name="replyToMailAddress">回覆郵件地址</param>
/// <param name="mailSubject">主旨</param>
/// <param name="mailBody">訊息主體(郵件內容)</param>
/// <param name="isBodyHtml">訊息主體是否採用 Html 格式</param>
/// <param name="mailAttachments">電子郵件的附件</param>
public static void SendMail(string smtpHost, string account, string password, string fromMailAddress, string toMailAddress, string replyToMailAddress, string mailSubject, string mailBody, bool isBodyHtml, params System.Net.Mail.Attachment[] mailAttachments)
{
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(smtpHost, 25); // 指定 Smtp 伺服器
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; // 指定外送電子郵件的處理方式
smtp.Credentials = new System.Net.NetworkCredential(account, password); // 利用帳號/密碼取得 Smtp 伺服器的認證

using (System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage()) // 要發送的訊息
{
mailMessage.SubjectEncoding = System.Text.Encoding.Default; // 主旨的編碼方式
mailMessage.BodyEncoding = System.Text.Encoding.Default; // 訊息主體編碼的方式
mailMessage.IsBodyHtml = isBodyHtml; // 訊息主體是否採用 Html 格式
mailMessage.From = new System.Net.Mail.MailAddress(fromMailAddress, fromMailAddress, System.Text.Encoding.Default); // 寄件者
mailMessage.To.Add(new System.Net.Mail.MailAddress(toMailAddress, toMailAddress, System.Text.Encoding.Default)); // 收件者
mailMessage.ReplyTo = new System.Net.Mail.MailAddress(replyToMailAddress, replyToMailAddress, System.Text.Encoding.Default); // 回覆郵件地址
mailMessage.Subject = mailSubject.Trim(); // 主旨
mailMessage.Body = mailBody.Trim(); // 訊息主體(郵件內容)
mailMessage.Priority = System.Net.Mail.MailPriority.High; // 郵件的優先權

// 電子郵件的附件
foreach (System.Net.Mail.Attachment mailAttachment in mailAttachments)
{
mailMessage.Attachments.Add(mailAttachment);
}

smtp.Send(mailMessage); // 傳送電子郵件
}
}


本篇文章回覆於2009-03-17 22:21
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

東東
檢舉此回應
不好意思,謝謝各位的回應,但我可能沒有弄清楚,當初我po時沒發現上面還有一篇,所以我試成功的是用gipi大大的方式去做的而不是Dreamyi大大的方式。我是把gipi大大的方式寫在.aspx裡,現在的問題是我不知道如何當輸入的格式不是Email時,此筆資料就不能去建立資料庫(它是寫在.vb的程式裡),兩者要如何去做處理,講明白點就是一個是由.aspx控制,一個是由.vb控制,而我的程式會先處理.aspx之後再去執行.vb裡面寫的程式,但我想做完.aspx後就不做.vb了,那該如何解決呢?


本篇文章回覆於2009-03-18 09:33
--未登入的會員無法查看對方簽名檔--
9樓
回應

gipi
檢舉此回應
你在輸入完資料後應該會按下某個按鈕進行submit,您可以在這個按鈕註冊一個onclick事件,
檢查mail是否有填寫,如果沒有填寫的話就不能submit,所以程序會像這樣:

1.mail有填寫且正確,submit時檢查OK,因此會跑vb的程式,會進行存檔
2.mail有填寫但驗證不正確,想要submit時會檢查到mail未填寫,因此不會跑vb
3.mail沒填寫,想要submit時會檢查到mail未填寫,因此不會跑vb

這樣子應該可以解到您的問題。


本篇文章回覆於2009-03-18 11:09
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

東東
檢舉此回應
我如果不是用某個按鈕進行submit,而是用這種方式進行傳送的話呢?



本篇文章回覆於2009-03-18 13:36
--未登入的會員無法查看對方簽名檔--
11樓
回應

gipi
檢舉此回應
您可在checkEmail的function中回傳驗證結果,如果不過的話回傳false,然後用下面的方式判斷,檔掉後端的事件。




本篇文章回覆於2009-03-18 14:44
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

東東
檢舉此回應
謝謝,那如果我要清除那個TextBox的資料使它變成空白,好讓使用者再重新輸入的話呢?


本篇文章回覆於2009-03-18 15:07
--未登入的會員無法查看對方簽名檔--
13樓
回應

gipi
檢舉此回應




本篇文章回覆於2009-03-18 15:56
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

東東
檢舉此回應
我今天才發現我使用#2的方式不管輸入正確或錯誤的Email都會顯示"請輸入正確的email格式!!"的訊息,還是上次我沒測試到正確的格式呢,我也忘記了。
我是寫一個Javascript的程式,如下

然後再傳送(它是一個btn)的地方去呼叫checkEmail就如同#11寫的,這樣子判斷,不管輸入怎樣的格式都是會跑alert的訊息,請問哪裡有問題呢?



本篇文章回覆於2009-03-19 11:57
--未登入的會員無法查看對方簽名檔--
15樓
回應

gipi
檢舉此回應
您上面抓TextBox1,下面卻去清TextBox2,這邊是不是有問題??


本篇文章回覆於2009-03-19 22:46
--未登入的會員無法查看對方簽名檔--
[變換順序]
 

回覆
如要回應,請先登入.