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

Posted

技术标签:

【中文标题】在javascript中计算用户名和电子邮件之间的差异【英文标题】:Calculating difference between username and email in javascript 【发布时间】:2010-12-20 06:24:27 【问题描述】:

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

例如,我希望这不可能:

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

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

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

//编辑 tester6 也是错误的。 i ment user6 -> tester@mydomain.com(好)。

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

Ciao!

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

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

【问题讨论】:

为什么这有利于安全? tester6比tester6差多少? 另一个问题 - 为什么 tes.ter 不好但 tester6 好?它们都只差一个字符。你能更具体(正式地)说明什么是“好”什么不是吗? 作为网站所有者,这对我来说更像是一个安全问题。我想尽量减少用户之间的交流。 我不会走这条路的。我在许多网站上使用我的名字作为用户名(事实上,那些不会让我有更大的机会再也见不到我的网站 - 他们的损失:)。此外,我真的不明白拥有用户名“tester”如何允许其他人与我联系:他们应该发送电子邮件至 tester@yahoo.com、tester@gmail.com 还是任何其他数以百万计的可发送电子邮件的域? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

PHP 有 a native levenshtein function 和 here is one written in JavaScript。

【讨论】:

嘿,是的,我以前看过这个方法。它看起来很复杂,我读到它是用于拼写检查的,所以我跳过了它,但我又看了一下这个链接。谢谢 真棒+1。如果你在你的答案中包含这个——phpjs.org/functions/levenshtein:463——它会更有用。 好吧,我的回答很烂……有一个+1:D【参考方案3】:

如果您只想禁止与电子邮件地址不同的用户名仅带有句点 (.),您可以从用户名中删除句点并将其与电子邮件地址进行比较。

//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

【讨论】:

【参考方案4】:

这样的?

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

【讨论】:

以上是关于在javascript中计算用户名和电子邮件之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

创建一个使用javascript打开默认邮件应用程序并附加文件的表单

在javascript中计算同一天的现在和未来时间之间的时差

在已保存时间和当前时间之间计算本地存储 javascript

POP3SMTP和IMAP之间的区别和联系

如何在不同计算机上的用户之间共享网站上的实时更新?

如何通过单独的联系表单将 HTML 输入从页面发送给用户