2011-08-17 14 views
5

Podobny do this question, ale nie wiesz, jak zaimplementować w tym przypadku.Jak analizować/przycinać adresy e-mail z tekstu

Zaufany użytkownik (nie musi zajmować się sprawdzaniem danych wejściowych) wpisuje/wkleja adresy e-mail w polu tekstowym. W przypadku rozmycia, chciałbym spojrzeć na tekst i posprzątać wszystko, co wpisał (zwykle po skopiowaniu i wklejeniu listy adresów od klienta poczty e-mail).

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

zostanie przycięta do:

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

Odpowiedz

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

lub po prostu zrobić pierwszy wiersz jeśli chce tablicę adresów e-mail.

+4

Nie twórz własnych wyrażeń regularnych do analizowania adresów e-mail. Poważnie? (com | org | cokolwiek)? –

+2

Tak, "cokolwiek" było posiadaczem miejsca dla wszystkich domen TLD, które chciał wstawić. Chociaż przy nowym orzeczeniu i kilkuset tysiącach dolarów "cokolwiek" mogłoby być TLD. :) –

+2

Dokładnie, to nie było tak, że nie rozumiałem "cokolwiek", tylko że ** gwałtownie nie zgadzam się z tym podejściem. ** –

4

Ten regex powinny usunąć coś w podwójnych cudzysłowach, jak również < i > znaków.

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

w JavaScript, możesz mieć coś wzdłuż tych linii:

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

To naprawdę nie ma znaczenia. Powyższe wyrażenie usunie wszelkie nawiasy kątowe, które są obecne. Nic nie stanie się żadnym adresom e-mail, które nie są otoczone nawiasami ostrymi. –

+0

@ Mark, czy to javascript? wygląda bardziej jak php ... – snumpy

+0

Przepraszam, brakowało mi, że to był JavaScript, a nie PHP. Zaktualizowałem, aby pokazać go w JS. –

4

Ważny adres e-mail może być bardzo dziwny, więc sugeruję, aby nie zabraniać niczego w tej dziedzinie, w przeciwnym razie może być dobrze, że twój program jest bezużyteczny, ponieważ użytkownicy nie będą mogli wysyłać wiadomości e-mail na ważne adresy e-mail .

Aby przeczytać całą historię see this blog post lub samodzielnie przejść do RFC.

+2

Mam wrażenie, że nie jest to forma skierowana do wszystkich użytkowników. Jest to raczej forma, której używa jedna osoba do masowego wprowadzania danych. Tak więc, chociaż myślę, że robisz świetne punkty, nie wiem, czy to jest problem tutaj. –

+0

Może masz rację, ale programista jest łatwy w pisaniu nieprzyjemnego oprogramowania, co jest dla użytkowników irytujące. Inteligentne oprogramowanie z niepotrzebną złożoną logiką czasami stanowi problem, szczególnie jeśli jest inteligentne, ale nie na tyle inteligentne, aby to naprawić, i jeśli nie ma sposobu na obejście i wyłączenie tego pół-sprytu. – 6502

1

Można użyć metody .math() szybko przetworzyć na e-maile do tablicy:

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

Jeśli chcesz następnie przekonwertować do łańcucha, można dodać .join(', ') lub .join('; ') do niego. Spójne wyrażenie jest uproszczone. Istnieje sporo wyrażeń regularnych, na których można analizować wiadomości e-mail, ale powyższa wersja jest uproszczona. Nie uwzględnia subdomen, jak wskazano w komentarzach poniżej, ani wieloczęściowych TLD (nie uwzględnia również symbolu + w pierwszej części adresu e-mail). Zastąp zwykłym wyrażeniem pasującym do twoich potrzeb.

+0

nie odpowiada [email protected] –

+0

@CodeGuy Masz rację. Zauważyłem, że regex jest bardzo uproszczony. Regex dla e-maili to dziesiątki i można je łatwo zastąpić tym, co mam powyżej. Nie przekazałem wyraźnie, że '.match' zwróci mecze. Jest to łatwy sposób na przetestowanie prostych adresów e-mail, o co prosił OP. Zachęcam inne osoby do edytowania moich odpowiedzi, jeśli mogą je poprawić, jednak dokładne wyrażenie nie było celem mojej odpowiedzi. Niezależnie od tego, jeśli chcesz dodać lepsze wyrażenie regularne, aby poprawić to, co mam tutaj, możesz to zrobić. –

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

Pozwala to na listy e-mail, które należy dostarczyć w następujących formatach (w tym kopiować i wklejać listy e-mail od ciebie Google Aby kwadrat):

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

E-mail identyfikatory mogą być oddzielone ,, ; lub znaki nowej linii.