2011-08-17 11 views
5

Simile a this question, ma non si sa come implementare in questo caso.Come analizzare/tagliare gli indirizzi email dal testo

Un utente fidato (non deve preoccuparsi della convalida dell'input) sta digitando/incollando gli indirizzi e-mail in un campo di testo. Nell'evento di sfocatura, mi piacerebbe dare un'occhiata al testo e ripulire tutto ciò che ha inserito (in genere dopo aver copiato e incollato un elenco di indirizzi da un client di posta elettronica).

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

vengono ridotti verso:

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

risposta

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

O semplicemente fare la prima linea, se hai intenzione di una serie di indirizzi e-mail.

+4

Si prega di non creare le proprie espressioni regolari per analizzare gli indirizzi e-mail. Sul serio? (Com | org | altro)? –

+2

Sì, il "qualunque" era un segnaposto per qualsiasi TLD che desiderava inserire. Sebbene, con la nuova sentenza e qualche centinaio di migliaia di dollari, "qualunque cosa" potrebbe essere un TLD. :) –

+2

esattamente, non è che non ho capito "qualunque cosa", solo che ** non sono d'accordo con questo approccio. ** –

4

Questa espressione regolare dovrebbe rimuovere tutto ciò in virgolette così come < e > caratteri.

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

in JavaScript, si potrebbe avere qualcosa in queste righe:

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

Non importa. La regex sopra rimuoverà qualsiasi parentesi angolare presente. Non succederà nulla a nessun indirizzo email che non sia circondato da parentesi angolari. –

+0

@ Mark, è questo javascript? sembra più come php ... – snumpy

+0

Scusa, mi sono perso che questo era Javascript e non PHP. Ho aggiornato per mostrarlo in JS. –

4

L'indirizzo email valido può essere molto strano, quindi suggerirei di non vietare nulla in quel campo altrimenti potrebbe essere possibile che il tuo programma sia inutile perché i tuoi utenti non saranno in grado di inviare email a indirizzi email validi .

Per leggere l'intera storia see this blog post o andare per la RFC da soli.

+2

La mia impressione è che questo non è un modulo rivolto all'utente di tutti gli utenti. Piuttosto è una forma che una singola persona sta usando per introdurre in massa una serie di dati. Quindi, mentre penso che tu abbia punti eccellenti, non so se è una preoccupazione qui. –

+0

Ma hai ragione, ma è così facile per un programmatore essere ingannato a scrivere software odioso che è solo una seccatura per gli utenti. Un software intelligente con logica complessa non necessaria a volte è un problema, soprattutto se è intelligente ma non abbastanza intelligente per farlo bene, e se non c'è modo di aggirare e disabilitare questa semi-intelligenza. – 6502

1

È possibile utilizzare il metodo .math() per analizzare rapidamente i messaggi di posta elettronica in un array:

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

Se si vuole poi convertire in una stringa, è possibile aggiungere o .join(', ').join('; ') ad esso. Il regex è semplificato. Ci sono alcune espressioni regolari là fuori per analizzare le e-mail con, ma quella sopra è una versione semplificata. Non tiene conto dei sottodomini, come indicato nei commenti sotto, o TLD multipart (non tiene conto del simbolo + nella prima parte dell'indirizzo email). Sostituire con un'espressione regolare che corrisponda alle tue esigenze.

+0

non corrisponde a [email protected] –

+0

@CodeGuy Hai ragione. Ho notato che la regex è molto semplificata. Le espressioni regolari delle e-mail sono una dozzina e possono essere facilmente sostituite per ciò che ho sopra. Il punto che non ho chiaramente espresso è che '.match' restituirà le partite. È un modo semplice per analizzare i semplici indirizzi e-mail, che è ciò che l'OP stava chiedendo. Mentre incoraggio altre persone a modificare le mie risposte se riescono a migliorarle, l'esatto regex non è stato al centro della mia risposta. Indipendentemente da ciò, se vuoi aggiungere una regex migliore per migliorare ciò che ho qui, sentiti libero di farlo. –

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

Questo permette la lista e-mail da fornire nei seguenti formati (tra cui copia e mailing list incolla da voi Google casella A):

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

L'email Ids può essere separata dalla ,, ; o a capo.

Problemi correlati