2009-11-25 31 views
2

出於安全原因,我希望我的網站上的用戶無法註冊類似於其電子郵件地址的用戶名。有人用的電子郵件地址[email protected]着註冊爲用戶或us.er等計算用戶名和電子郵件在javascript中的差異

例如,我想這不是可能:

測試儀 - > [email protected](錯誤) TES .ter - > [email protected](錯誤) 等

但我確實希望能夠使用下列內容:

tester6 - > [email protected](好) 等

//編輯 tester6也是錯誤的。我的用戶6 - > [email protected](好)。

有沒有人有一個想法如何實現這一點,或儘可能接近。我正在檢查這在JavaScript中,然後在php服務器上。

Ciao!

ps。也許有一些jquery插件來做到這一點,我目前找不到這個。爲此使用插件的缺點是,我必須在php中實現相同的功能。如果它是一個長插件,則需要一些時間來翻譯。

//再次編輯 如果我只檢查@之前的部分,他們仍然可以使用userhotmailcom或usergmail等。如果他們提供的電子郵件是很明顯的。

+5

爲什麼這個有益的安全? – NDM 2009-11-25 11:51:02

+0

tes.ter比tester6更糟? – 2009-11-25 11:55:01

+0

另一個問題 - 爲什麼tes.ter不好,但tester6好?它們的差別只有一個字符。你能更具體(正式)瞭解什麼是「好」,什麼不是? – 2009-11-25 11:55:02

回答

9

通常,我使用Levenshtein distance算法來檢查密碼是否看起來像登錄。

PHP有a native levenshtein functionhere is one written in JavaScript

+0

嘿,是的,我已經看過這種方法。它看起來很複雜,我讀它用於拼寫檢查,所以我跳過它,但我再看看這個鏈接。謝謝 – 2009-11-25 12:15:31

+1

真棒+1。如果你在回答中加入了這個 - http://phpjs.org/functions/levenshtein:463 - 它會更有用。 – 2009-11-25 12:22:10

+0

那麼我的答案結束了吸吮...有+1:D – alex 2009-11-26 23:03:52

3

是這樣的嗎?

var charsRe = /[.+]/g; // Add your characters here 
if (username.replace(charsRe, '') == email.split('@')[0].replace(charsRe, '')) 
    doError(); 
0

如果您只想禁止僅使用句點(.)的電子郵件地址的用戶名,則可以從用戶名中刪除句點並將其與電子郵件地址進行比較。

//I don't know php - translating this pseudo code won't be hard 

$email = "[email protected]" 
$emailname = $email.substring(0, $email.indexOf('@')); 
$uname = "som.e.on.e"; 
$uname = $uname.replace(/\./g, "");//regex matching a '.' globally 

if($uname === $emailname) 
    showInvalidNameErrorMessage(); 

修改正則表達式來防止連字符和下劃線/[\-._]/g

0

好,我是新手PHP開發人員。但我腦海中的答案是,如果您只允許他們只註冊他們的電子郵件地址(不會與他人共享),然後分別詢問他們的名字和姓氏,這不是很好嗎?只在公共內容(例如博客等)中顯示他們的名字。我不是編程方面的專家,如果我錯了,請糾正我,但我仍然無法理解你對你的安全性。對不起,英語不好,我不是英語母語的人。

相關問題