2011-08-30 48 views
5

有時用戶拼錯了他們的電子郵件域名,因此他們輸入了錯誤的電子郵件地址。例如, [email protected]而不是[email protected]如何更正拼寫錯誤的電子郵件地址域名?

以前有人想過這個嗎?任何人都可以建議如何處理這種類型的錯誤?

+8

問題是,gmial.com可能是一個完全有效的域名。我建議你不要試圖做到這一點 - 但如果你真的想,創建一個拼寫錯誤的白名單來自動更正,並且不要創建任何通用規則。 – Prescott

+0

試圖做到這一點的麻煩在於,您最終可能會向錯誤的人發送電子郵件並令潛在客戶感到煩惱。 –

+1

@普雷斯科特,對於幾乎所有的拼寫檢查工具都是如此。我希望他不會尋找一個自動更正,這當然是一個失誤。 –

回答

13

有人可以建議如何處理這種類型的錯誤?

您通常會向給定的地址發送一封確認電子郵件,並且只有當該電子郵件中的鏈接已被點擊時纔會繼續。

有沒有其他的好方法來處理這個問題 - 無法確定gmial.com是否是一個錯字,因爲它是一個有效的域名。

+1

+1確認電子郵件是最好的。你經常看到的另一件事是讓他們輸入兩次(並希望他們不知道如何複製/粘貼)。 – Thilo

+0

谷歌也不可能知道你是否正確拼寫了你的查詢,但它經常可以建議替換爲改進的查詢。 –

+0

@在這裏獲得神奇的詞是肯定的**。儘管在接受gmial.com地址和其他常見類型錯誤之前,沒有人反對提出修正意見,但的確如此。 +1爲您的建議 –

1

有趣的是,該網址確實存在http://www.gmial.com 事實上,你很難知道這是一個錯誤還是一個「奇怪」的域名。看看谷歌API的,因爲當你在谷歌中鍵入一些錯誤,他們提出你「你的意思是......」

好運

阿爾諾

3

在我看來,這是近乎不可能來爲通用案例提供通用解決方案。

這就是說,最常見的錯字是互換兩個adajcent字母。 所以你可能想檢查最大的網站Gmail,雅虎和你有什麼字符內容;基於此建議如果原件不匹配gmail等替代拼寫。

  • 不要假設用戶有問題,如果它看起來比普通名稱更可疑,請提供替代方案。另一份答覆中提到了白名單。
  • 使用確認郵件,如果你需要知道你可以從這個地址得到答覆。 你不能假設你發現的拼寫錯誤,這是確認郵件的用途。
  • 使它非常不突出(阿賈克斯心靈)。
0

如前所述,自動假定某人錯誤輸入了電子郵件並不是一個好主意。更好的方法是實施來檢查,如果電子郵件的域名是有可能輸錯一個小javascript函數,並提醒用戶,而不是假設他們從一開始就錯了。

給我一分鐘,以創建一個小樣機。

編輯:好吧,也許這是一分多鐘。看看http://jsbin.com/iyaxuq/8/edit,看到自己的JavaScript如何能幫助預防常見的輸入錯誤。嘗試使用以下電子郵件:[email protected][email protected][email protected](hotmail錯字)和[email protected]

注:我用一個懶惰的正則表達式來驗證電子郵件。不要爲一個真正的應用程序依賴於它(或就此而言,大多數正則表達式)。

0

不能提供一種方式,你自動糾正拼寫錯誤的電子郵件域名此功能,因爲它假定你是無效的名字,將是有效的。您應該期望將任何內容作爲電子郵件地址域名輸入。

我建議,如果你正在創建一個註冊表單,提供用戶與具有大家都知道的,這樣他可以從作出選擇所有可能的域名下拉。

希望這會有所幫助。

0

你可以在你的數據庫中創建一個流行的電子郵件域列表(gmail.com,yahoo.com,ymail.com等),並驗證用戶輸入的列表中的電子郵件地址,如果該域名與這些域名之一類似,您應該顯示警告並允許用戶在必要時進行更正,而不是自動更正。並比較在你的列表中的域名進入了域名,您可以使用一種算法像基於如果用一個詞聽起來像第二次在SQL Server中,匹配的話soundex功能使用的一個。

編輯:你可以找到more details the SOUNDEX function here

+0

soundex的域名?!我想知道這將如何與像flickr.com這樣的名字一起工作......如果我想進入flicker.com,SQL會發現它嗎? –

0

試圖自動錯誤數據的修正是非常危險的做法。最終,只有用戶可以提供正確的數據。然而,有關格式化電子郵件地址的嚴格規定 - 正則表達式檢查可以在JavaScript中運行(或使用具有相同正則表達式語法的preg函數) - 但請注意,在正則表達式的互聯網上有很多不好的例子聲稱要解決問題。

這應該是一個相當完整的實現了RFC2822 ADDR_SPEC驗證的:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gi 

然而,在實踐中我發現這是充足的:

/^[a-z0-9\._%+!$&*=^|~#%'`?{}/\-][email protected]([a-z0-9\-]+\.){1,}([a-z]{2,6})$/gi 

然後,服務器端,你可以做一個MX lookup驗證提供的域不僅符合格式要求,而且作爲電子郵件接收站點存在。

這並不能證明指定的郵箱存在於該網站,也不是它正在接受電子郵件 - 最終您需要發送一封電子郵件到該地址,包括點擊後鏈接/密碼以確定電子郵件地址是否爲有效。

2

在我們的表格中我們使用了多種技術。雖然不良數據仍然可以通過,但機會大大減少。

首先是做一個簡單的正則表達式的格式是常用的 - 只是確保它是RFC兼容。如果失敗了,最好爲用戶提供一個確認表單,因爲他們可能會在解決此問題時爲您解決其他錯誤。

下一部分是檢查域的TLD部分。由於所有TLD都可以知道,因此使用一些正則表達式測試可以相對容易地檢測拼寫錯誤。只需將某個表中的所有當前TLD列出並根據需要不時更新(請注意,在處理國際頂級域名(TLD)時,此列表可能會變得複雜。如果您只處理美國流量,則規則多比如說,如果您銷售的服務僅限於美國境內,那麼在表單提交時過濾掉國際電子郵件是有意義的,我們是,所以這對我們很有用) 。

三是做類似於@npclaudiu建議的東西 - 掃描域名部分中大名字郵件主機(gmail,hotmail,yahoo等)的常見拼寫錯誤,如果檢測到可能的匹配,請提供確認表單給用戶。 (你輸入[email protected],你的意思是hotmail.com?)

如果你經歷了這些步驟,那麼你可以做@symcbean建議的MX查找。

最後,如果所有這些都成功了,有一種方法(但我還沒有測試過它)與遠程SMTP主機進行通信以查看郵箱是否存在。我們即將開始自己測試。我發現如何對這樣的位置: http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

+0

我寫了一個C/C++庫來檢查電子郵件地址的有效性。電子郵件地址的RFC非常複雜,並且很難用正則表達式實現(如果你真的想接受RFC支持的所有內容)。我的庫是免費的,可以在這裏找到:http://snapwebsites.org/project/libtld - 另外我認爲禁止國際電子郵件地址是「危險的」,因爲我可以收到諸如[email protected]這樣的電子郵件,.me不是美國的域名(儘管這裏廣泛使用.co,.fm, .ws等)我的頂級域名(TLD)表格是7075個條目......它必須非常複雜! –

6

當這個問題被問這是不存在的,但我建議MailCheck其自動提示更正進入電子郵件。它被大公司成功使用。

+0

^此外,如果您需要AngularJS包裝,請查看此答案[AngularJs指令爲拼寫錯誤的電子郵件提供建議](http:// stackoverflow。com/questions/34446950/angularjs-directive-to-offer-suggestions-for-wrongpelled-emails/34446951#34446951) – kape123

+0

這個問題被標記爲「php」,但這是一個Javascript庫。 – Flimm

0

創建常見的電子郵件域名列表:

hotmail.com 
gmail.com 
googlemail.com 
... etc 

當用戶輸入一個電子郵件地址,請輸入地址的域名,並把你的列表之間的編輯距離。如果距離爲1(或可能最多爲2),則要求用戶確認這是他們的電子郵件地址。

相關問題