簡體   English   中英

驗證逗號分隔的電子郵件列表

[英]Validate a comma separated email list

我正在嘗試提出一個正則表達式來驗證逗號分隔的電子郵件列表。

我想首先驗證完整列表,然后拆分(“;”),然后從拆分中修剪每個數組值(每個電子郵件)。

我想驗證以下表達式:

EMAIL,EMAIL  --> Ok
EMAIL, EMAIL  --> Ok
EMAIL , EMAIL  --> Ok
EMAIL , , EMAIL  --> Wrong
EMAIL , notAnEmail , EMAIL  --> Wrong

我知道有許多用於驗證電子郵件的復雜表達式,但我不需要任何花哨的東西,這對我/\\S+@\\S+\\.\\S+/;/\\S+@\\S+\\.\\S+/;

我想要簡單明了的 JS,而不是 jQuery。 謝謝。

編輯:我已經考慮過先驗證然后拆分,但是使用到目前為止我嘗試過的表達式,這將被驗證為兩個正確的電子郵件:

EMAIL, EMAIL  .  EMAIL

我想和每封電子郵件一樣驗證列表本身。

一種更簡單的方法是刪除空格並首先拆分字符串:

var emails = emailList.replace(/\s/g,'').split(",");

這將創建一個數組。 然后,您可以遍歷數組並檢查元素是否為空且是否為有效的 emailadres。

var valid = true;
var regex = /^(([^<>()[\]\\.,;:\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,}))$/;

for (var i = 0; i < emails.length; i++) {
     if( emails[i] == "" || ! regex.test(emails[i])){
         valid = false;
     }
}

注意:我從這里得到了正則表達式

另請注意,您需要刪除額外的空格,因此需要添加一個額外的步驟,如下所示:

var emailStr = "felipe@google.com   , felipe2@google.com, emanuel@google.com\n";


function validateEmailList(raw){
    var emails = raw.split(',')


    var valid = true;
    var regex = /^(([^<>()[\]\\.,;:\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,}))$/;

    for (var i = 0; i < emails.length; i++) {
        if( emails[i] === "" || !regex.test(emails[i].replace(/\s/g, ""))){
            valid = false;
        }
    }
    return valid;
}


console.log(validateEmailList(emailStr))

通過添加.replace(/\\s/g, "")可以確保刪除所有空格,包括新行和制表符。 樣本的結果是真實的,因為我們正在擺脫所有空間。

我同意@crisbeto 的評論,但如果您確定這是您想要的方式,您可以通過匹配以下正則表達式來完成:

^(\\s?[^\\s,]+@[^\\s,]+\\.[^\\s,]+\\s?,)*(\\s?[^\\s,]+@[^\\s,]+\\.[^\\s,]+)$

我使用了多年的正則表達式,代碼相同。 我相信這對每個人都有效:

^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]{2,4}\s*?,?\s*?)+$

要開心 :)

 const regExp = new RegExp(/^(\\s?[^\\s,]+@[^\\s,]+\\.[^\\s,]+\\s?,)*(\\s?[^\\s,]+@[^\\s,]+\\.[^\\s,]+)$/); const dom = document.getElementById("regExDom"); const result = regExp.test("test@gmail.com,test2@gmail.com,test3@test.com") console.log("Regex test => ", result) dom.innerHTML = result;
 <div id="regExDom"></div>

暫無
暫無

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

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