在javascript中计算用户名和电子邮件之间的差异

时间:2009-11-25 11:47:19

标签: php javascript jquery algorithm email

出于安全原因,我希望我网站上的用户无法注册类似于其电子邮件地址的用户名。电子邮件地址为user@domain.com的人无法注册为用户或我们等等

例如,我希望这不可能:

测试仪 - > tester@mydomain.com(错误) tes.ter - > tester@mydomain.com(错误) 等

但我确实希望能够使用以下内容:

tester6 - > tester@mydomain.com(好) 等

//编辑 tester6也是错误的。我用户6 - > tester@mydomain.com(好)。

有没有人知道如何实现这一点,或者尽可能接近的事情。我在javascript中检查这个,然后在php中的服务器上。

侨!

PS。也许有一些jquery插件可以做到这一点,到目前为止我找不到这个。使用插件的缺点是,我必须在php中实现相同的功能。如果它是一个很长的插件,翻译需要一些时间。

//再次编辑 如果我只检查@之前的部分,他们仍然可以使用userhotmailcom或usergmail等。如果他们提供电子邮件是明显的。

4 个答案:

答案 0 :(得分:9)

通常,我使用Levenshtein distance算法来检查密码是否像登录一样。

PHP有a native levenshtein functionhere is one written in JavaScript

答案 1 :(得分:3)

这样的东西?

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

答案 2 :(得分:0)

如果你想要的只是允许用户名不同于电子邮件地址而只有句点(.),你可以从用户名中删除句点并将其与电子邮件地址进行比较。

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

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

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

修改正则表达式以防止连字符和下划线/[\-._]/g

答案 3 :(得分:0)

好吧,我是一名新手PHP开发人员。但我心中的答案是,如果你只允许他们只注册他们的电子邮件地址(不会与他人共享),然后单独询问他们的名字和姓氏,那不是很好吗?只在公共内容中显示他们的名字(即博客等)。我不是编程方面的专家,如果我错了,请纠正我,但我仍然无法理解你的安全性。对不起英语不好,我不是母语为英语的人。