2011-08-17 60 views
5

this question類似,但不確定如何在這種情況下實現。如何從文本中解析/裁剪電子郵件地址

受信任的用戶(不需要關心驗證輸入)是將電子郵件地址輸入/粘貼到文本字段中。在模糊事件上,我想查看文本並清理他輸入的任何內容(通常是在從電子郵件客戶端複製並粘貼地址列表之後)。

"Bob Smith" <[email protected]>, [email protected], "John Doe"<[email protected]>

可能會被縮減到:

[email protected], [email protected], [email protected]

回答

-2
myEmailList=userInput.match(/[a-zA-z0-9_.][email protected][a-zA-Z0-9_.]+\.(com|org|whatever)/g); 
myEmailListString=myEmailList.join(', '); 

或者只是做的第一線,如果你想要的電子郵件地址的數組。

+4

請不要讓你自己的正則表達式來解析郵件地址。真的嗎? (COM |組織|什麼)? –

+2

是的,無論他想插入什麼頂級域名,「無論」都是一個佔位符。雖然,新的裁決和幾十萬美元,「任何」都可能是頂級域名。 :) –

+2

確切地說,這不是我不明白「無論」,只是**我猛烈地不同意這種做法。** –

4

此正則表達式應該刪除在雙引號裏的東西以及<>字符。

/".*?"|[<>]/ 

在Javascript中,你可能有幾行內容:

line.replace(/".*?"|[<>]/g, ''); 
+0

這並不重要。上面的正則表達式將刪除存在的任何尖括號。任何未包含尖括號的電子郵件地址都不會發生任何變化。 –

+0

@Mark,這是javascript嗎?它看起來更像是php ... – snumpy

+0

對不起,我錯過了這是Javascript而不是PHP。我已經更新了在JS中展示它。 –

4

有效的電子郵件地址可以是非常奇怪,所以我建議不禁止在該領域的任何東西,否則可能很可能是你的程序是無用的,因爲你的用戶將無法發送電子郵件,以有效的電子郵件地址。

要閱讀整個故事see this blog post或自己去參加RFC。

+2

我的印象是,這不是一種面向所有用戶的面向用戶的表單。而是一個人用來大量輸入一堆數據的形式。所以,雖然我認爲你提出了很好的觀點,但我不知道這是否是一個問題。 –

+0

馬你是對的,但是對於一個程序員被欺騙寫入令人討厭的軟件來說很容易,這對用戶來說只是一個煩惱。帶有不必要的複雜邏輯的智能軟件有時是一個問題,特別是如果智能軟件不夠智能,無法正確使用,並且無法規避和禁用這種半智能功能。 – 6502

1

可以使用.math()方法將電子郵件很快解析出到一個數組:

inputval.match(/[A-z0-9][email protected][A-z0-9]+.[A-z]{2,3}/g) 

如果你想然後再轉換爲字符串,您可以添加.join(', ').join('; ')它。正則表達式被簡化了。有相當多的正則表達式來解析郵件,但上面的是簡化版本。如下面的評論或多部分頂級域名(它也沒有考慮電子郵件地址的第一部分中的+符號),它沒有考慮子域名。用符合您需求的正則表達式替代。

+0

不符合[email protected] –

+0

@CodeGuy你是對的。我確實注意到正則表達式非常簡化。電子郵件正則表達式是一打一毛錢,可以很容易地取代我上面的東西。我沒有明確表達的一點是'.match'會返回匹配。這是解析簡單電子郵件地址的簡單方法,這正是OP所要求的。雖然我鼓勵其他人編輯我的答案,如果他們能夠改進他們,確切的正則表達式不是我的答案的焦點。無論如何,如果你想添加一個更好的正則表達式來改進我在這裏的內容,請隨時這樣做。 –

3
var emailList = userInput 
    .replace(/[^,;]*.?</g, "") 
    .replace(/>/g, "") 
    .replace(/[,; ]{1,}/g, "\n") 
    .replace(/[\n]{2,}/g, "\n") 
    .split("\n") 

這允許在下列格式(包括 複製和粘貼郵件列表從您谷歌的方格)將要提供的電子郵件列表:

"Bob Rob"<[email protected]>, [email protected]; [email protected] [email protected] 

電子郵件ID可以由,分離, ;或換行符。

相關問題