簡體   English   中英

這是有效的電子郵件地址嗎?

[英]Is this a valid email address?

"Françoise Lefèvre"@example.com

我正在閱讀RFC 5321 ,試圖真正了解什么是有效的電子郵件地址-而且可能使此操作變得比原來困難得多-但這使我很煩。

  ie, within a quoted string, any ASCII graphic or space is permitted without blackslash-quoting except double-quote and the backslash itself. 

這是否意味着ASCII擴展字符集在引號內有效? 還是僅表示標准ASCII表

編輯 -考慮到答案,這是一個簡單的jQuery 驗證程序 ,可以對插件的內置電子郵件驗證進行補充,以檢查字符。

jQuery.validator.addMethod("ascii_email", function( value, element ) { 
    // In compliance with RFC 5321, this allows all standard printing ASCII characters in quoted text.
    // Unquoted text must be ASCII-US alphanumeric or one of the following: ! # $ % & ' * + - / = ? ^ _ ` { | } ~   
    // @ and . get a free pass, as this is meant to be used together with the email validator

    var result = this.optional(element) || 
        (
            /^[\u002a\u002b\u003d\u003f\u0040\u0020-\u0027\u002d-u002f\u0030-\u0039\u0041-\u005a\u005e-\u007e]+$/.test(value.replace(/(["])(?:\\\1|.)*?\1/, "")) &&     
            /^[\u0020-\u007e]+$/.test(value.match(/(["])(?:\\\1|.)*?\1/, ""))   
        );
    return result;
}, "Invalid characters");

插件的內置驗證看起來不錯,除了捕獲無效字符。 這里列出的測試用例中它僅不允許注釋,折疊空格和缺少TDL的地址(即:@ localhost,@ 255.255.255.255),所有這些我都可以輕松實現。

在此RFC中, ASCII表示US-ASCII ,即,不允許使用值大於127的字符。 作為證明,以下是RFC 5321的一些引號:

郵件數據可以包含128個ASCII字符代碼中的任何一個,[...]

[...]

系統不得以要求在SMTP中使用非ASCII字符(高位設置為1的八位字節)或ASCII“控制字符”(十進制值0-31和127)的方式定義郵箱。 這些字符不得在MAIL或RCPT命令或其他需要郵箱名稱的命令中使用。

這些引號很明顯地暗示值大於127 non-ASCII被視為non-ASCII 由於在MAIL TO或RCPT命令中明確禁止使用此類字符,因此無法將其用於電子郵件地址。

因此, "Francoise Lefevre"@example.com是完全有效的地址(根據RFC),而"Françoise Lefèvre"@example.com則不是。

根據此MSDN頁面,擴展的ASCII字符當前無效,但是有一個提議的規范可以對此進行更改。

http://msdn.microsoft.com/zh-cn/library/system.net.mail.mailaddress(VS.90).aspx

重要的部分在這里:

Thomas Lee是正確的,因為在電子郵件地址中加引號的本地部分是有效的,並且如果沒有用引號引起來的字符串,則某些郵件地址可能無效。 但是,其他人提到的字符(如變音符號和龍舌蘭)不在ASCII字符集中,它們是擴展的ASCII。 在RFC 2822(以及后續的RFC 5322和3696)中,dtext規范(在引用的本地部分中允許)僅允許大多數ASCII值(RFC 2822,第3.4.1節),其中包括33-90和94-126范圍內的值。 已經提出RFC 5335,該RFC 5335允許在addr-spec中使用非ascii字符,但是仍被標記為實驗性,因此MailAddress不支持該字符。

從技術上講是的,但請繼續閱讀:

盡管以上關於本地部分的定義是相對允許的,
為了實現最大的互操作性,希望接收郵件的主機應避免在Local-part需要(或使用)Quote-string形式或Local-區分大小寫的地方定義郵箱。

...

系統不得以要求在SMTP中使用非ASCII字符的方式定義郵箱。

HTML5規范對有效電子郵件地址的問題有意思

有效的電子郵件地址是與ABNF產生1 *(atext /“。”)“ @” ldh-str 1 *(“ .ldh-str)匹配的字符串,其中在RFC 5322第3.2.3節中定義了文本,而ldh-str在RFC 1034第3.5節中定義。

當然,這樣做的IsValidEmailAddress是,您可以查看開放源代碼瀏覽器的源代碼以對其進行驗證 (查找IsValidEmailAddress函數)。 當然它是用C語言編寫的,但是翻譯成JS並不難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM