2009-11-29 86 views
4

有沒有一種標準或簡單的方式來從電子郵件地址中猜出一個名字,類似於Gmail所做的?從電子郵件中猜出名字

例如,「[email protected]」應該給「約翰史密斯」。

這樣做不應該太難(剝離域名,刪除特殊字符,大寫等),但我確定應該有現有的代碼。

Ruby中的代碼將是首選,但任何其他語言都可以。

+0

Gmail實際上並沒有這樣做;它使用from字段中的名稱。 – SLaks 2009-11-29 18:40:24

+0

只有格式如此,如果是[email protected]或[email protected]會怎麼樣?你怎麼知道在哪裏拆分名字? – 2009-11-29 18:53:54

+0

如果它不是大寫,它可能會更好 – Ralf 2009-11-29 19:02:50

回答

5
def email_to_name(email) 
    name = email[/[^@]+/] 
    name.split(".").map {|n| n.capitalize }.join(" ") 
end 

p email_to_name("[email protected]") 
# => "John Smith" 

這是一個這麼簡單的任務,我懷疑你會發現任何「現有代碼」這樣做。

+0

我只是覺得可能會有很多特例,有人可能會提出啓發式來處理它。我將從這段代碼開始並對其進行調整。 – Ralf 2009-11-29 19:00:32

-3

Regular expressions可能是要走的路。

+1

在這個答案中沒有太多的幫助 – 2009-11-29 19:52:32

1

下面的正則表達式應該解決您的問題

/(\w+)[._-](\w+)@.+/ 
+0

我見過像[email protected]這樣的地址,所以你的re會捕獲'smith'和' jr'在這個例子中。 – 2009-11-29 19:53:05

0

和一個非常大的字典常見的姓和名的,因爲不是所有的電子郵件地址將涉及這麼好聽實際名稱。

如果您的所有郵件來自一個國家或文化,這可能會更好。

雖然,我不知道你爲什麼要這樣做。

+0

對於我正在處理的網站,我想在用戶尚未指定名稱時使用此網站。 – Ralf 2009-11-29 18:58:21

+0

在這種情況下,我寧願只使用電子郵件地址減去domain.com。 – 2009-11-29 20:28:08

1

Gmail使用信封風格的電子郵件地址rfc-822的擴展之一。所以它只能猜測電子郵件地址是否是這樣的形式:Terry Terribad <[email protected]>

對於Gmail來說,它只是一個試圖通過解析電子郵件並通常猜測來弄清楚在<>前面發生了什麼的情況。

否則真的沒有辦法猜測我的名字是從我的電子郵件地址查克VOSE,因爲我不使用chuck.vose或類似的東西。

+0

是的,這是正確的答案,谷歌沒有做任何猜測它讀取的是什麼發送,所有的電子郵件提供商(幾乎)追加名稱到電子郵件地址 – Ayyash 2009-11-29 20:18:35

+0

當名稱不存在時,gmail使用@domain之前的所有內容,所以如果只是「[email protected]」,它將是「特里」。 – Ralf 2009-11-30 13:42:49

0

當你猜這個名字時,這會很有意思,因爲用戶沒有在他們的電子郵件地址中使用他們的名字,所以這樣會很有趣。就像一個人說的那樣,你應該有一個常用名字的字典,如果你提取的單詞(使用正則表達式)與字典中的名字匹配,你只能猜測。但是,讓它填充某個完全錯誤和荒謬的B/C的名字可能並不是一個壞主意,那麼它可能是他們將其改爲真名的動機。 :-)