有沒有一種標準或簡單的方式來從電子郵件地址中猜出一個名字,類似於Gmail所做的?從電子郵件中猜出名字
例如,「[email protected]」應該給「約翰史密斯」。
這樣做不應該太難(剝離域名,刪除特殊字符,大寫等),但我確定應該有現有的代碼。
Ruby中的代碼將是首選,但任何其他語言都可以。
有沒有一種標準或簡單的方式來從電子郵件地址中猜出一個名字,類似於Gmail所做的?從電子郵件中猜出名字
例如,「[email protected]」應該給「約翰史密斯」。
這樣做不應該太難(剝離域名,刪除特殊字符,大寫等),但我確定應該有現有的代碼。
Ruby中的代碼將是首選,但任何其他語言都可以。
def email_to_name(email)
name = email[/[^@]+/]
name.split(".").map {|n| n.capitalize }.join(" ")
end
p email_to_name("[email protected]")
# => "John Smith"
這是一個這麼簡單的任務,我懷疑你會發現任何「現有代碼」這樣做。
我只是覺得可能會有很多特例,有人可能會提出啓發式來處理它。我將從這段代碼開始並對其進行調整。 – Ralf 2009-11-29 19:00:32
下面的正則表達式應該解決您的問題
/(\w+)[._-](\w+)@.+/
我見過像[email protected]這樣的地址,所以你的re會捕獲'smith'和' jr'在這個例子中。 – 2009-11-29 19:53:05
和一個非常大的字典常見的姓和名的,因爲不是所有的電子郵件地址將涉及這麼好聽實際名稱。
如果您的所有郵件來自一個國家或文化,這可能會更好。
雖然,我不知道你爲什麼要這樣做。
對於我正在處理的網站,我想在用戶尚未指定名稱時使用此網站。 – Ralf 2009-11-29 18:58:21
在這種情況下,我寧願只使用電子郵件地址減去domain.com。 – 2009-11-29 20:28:08
Gmail使用信封風格的電子郵件地址rfc-822的擴展之一。所以它只能猜測電子郵件地址是否是這樣的形式:Terry Terribad <[email protected]>
。
對於Gmail來說,它只是一個試圖通過解析電子郵件並通常猜測來弄清楚在<>前面發生了什麼的情況。
否則真的沒有辦法猜測我的名字是從我的電子郵件地址查克VOSE,因爲我不使用chuck.vose或類似的東西。
當你猜這個名字時,這會很有意思,因爲用戶沒有在他們的電子郵件地址中使用他們的名字,所以這樣會很有趣。就像一個人說的那樣,你應該有一個常用名字的字典,如果你提取的單詞(使用正則表達式)與字典中的名字匹配,你只能猜測。但是,讓它填充某個完全錯誤和荒謬的B/C的名字可能並不是一個壞主意,那麼它可能是他們將其改爲真名的動機。 :-)
Gmail實際上並沒有這樣做;它使用from字段中的名稱。 – SLaks 2009-11-29 18:40:24
只有格式如此,如果是[email protected]或[email protected]會怎麼樣?你怎麼知道在哪裏拆分名字? – 2009-11-29 18:53:54
如果它不是大寫,它可能會更好 – Ralf 2009-11-29 19:02:50