• Thứ Ba, 21/10/2008 14:09 (GMT+7)

    Lập trình kiểm tra chuổi có phải là email hợp lệ bằng VB.NET

    Lượt xem 1650
    Đánh giá

    Câu hỏi :
    Xin hướng dẫn cách kiểm tra một đoạn Text nhập vào có phải là địa chỉ Email hay không, sử dụng VB.Net. 
     

    Trả lời :
     Việc kiểm tra 1 chuỗi có phải là địa chỉ e-mail hợp lệ có 2 cấp độ:
     1. Kiểm tra xem chuỗi có miêu tả 1 địa chỉ e-mail đúng cú pháp không. Đây là hoạt động xử lý chuỗi. Theo cú pháp, địa chỉ e-mail sẽ có dạng:

     <account>@<server quản lý>
     trong đó <account> là tên nhận dạng account e-mail trong cục bộ server e-mail tương ứng, <account> là 1 chuỗi ký tự chữ số (a-z hay 0-9). Còn <server quản lý> là tên nhận dạng server e-mail quản lý account. Có 2 dạng miêu tả <server quản lý>: dạng địa chỉ DNS như hotmail.com, yahoo.com... và dạng địa chỉ IP như 203.47.8.56.
     Dựa vào cú pháp miêu tả account e-mail, bạn có thể duyệt từng ký tự trong chuỗi nhập vào để xem nó có thỏa cú pháp không.

     2. Kiểm tra xem địa chỉ e-mail có thật không, nghĩa là kiểm tra xem có tồn tại server e-mail theo miêu tả trong địa chỉ không, nếu tồn tại thì kiểm tra tiếp xem server đó có quản lý account được miêu tả trong địa chỉ e-mail không. Việc kiểm tra ở cấp độ 2 này được thực hiện bằng cách lập trình mạng, nối kết thử với máy server mà địa chỉ e-mail qui định; nếu nối kết thành công thì gửi 1 thông báo request đến server hỏi xem account có thật không; nếu account có thật thì Ok, nếu không thì địa chỉ e-mail cần kiểm tra là địa chỉ "ma", mặc dù đúng cú pháp nhưng không tồn tại thực tế.

     Sau đây là đoạn code VB .Net mà chúng tôi viết để demo việc kiểm tra địa chỉ e-mail theo yêu cầu của bạn. Lưu ý chúng tôi chỉ kiểm tra theo dạng địa chỉ DNS và chưa thực hiện kiểm tra cấp độ 2.

     'hàm kiểm tra địa chỉ e-mail
     Private Function IsDNSMailAddr(ByVal addr As String) As Boolean
     'khai báo một số biến cần dùng
     Dim len As Integer
     Dim i As Integer
     Dim addarr() As Char
     Dim ch As Char
     'giả định kết quả sai
     IsDNSMailAddr = False
     'tìm độ dài chuỗi
     len = addr.Length
     'đổi chuỗi sang mảng các ký tự
     addarr = addr.ToCharArray()
     i = 0
     On Error GoTo test1
     'duyệt tìm thành phần <account>
     While (i < len) And (addarr(i) <> "@"c)
     ch = addarr(i)
     If (("0"c <= ch) And (ch <= "9"c)) Or (("a"c <= ch) And (ch <= "z"c)) Then
     i = i + 1
     Else
     'đã tìm được 1 ký tự không hợp cú pháp
     Exit Function
     End If
     End While
     test1:
     i = i + 1
     'nếu hết chuỗi => không hợp cú pháp
     If i = len Then Exit Function
     On Error GoTo test2
     'duyệt tìm thành phần đầu tiên của <server>
     While (i < len) And (addarr(i) <> "."c)
     ch = addarr(i)
     If (("0"c <= ch) And (ch <= "9"c)) Or (("a"c <= ch) And (ch <= "z"c)) Then
     i = i + 1
     Else
     'đã tìm được 1 ký tự không hợp cú pháp
     Exit Function
     End If
     End While
     test2:
     i = i + 1
     'nếu hết chuỗi => không hợp cú pháp
     If i = len Then Exit Function
     On Error GoTo test3
     'duyệt tìm các thành phần còn lại của <server>
     While (i < len)
     ch = addarr(i)
     If (("0"c <= ch) And (ch <= "9"c)) Or (("a"c <= ch) And (ch <= "z"c) Or ch = "."c) Then
     i = i + 1
     Else
     Exit Function
     End If
     End While
     test3:
     'nếu chạy tới đây => hợp cú pháp
     'nếu cần hãy viết code kiểm tra xem địa chỉ có tồn tại ?
     IsMailAddr = True
     End Function
    Ý kiến phản hồi và bình luận      Gởi ý kiến của bạn ?
    Chuyên mục: Lập trình