【问题标题】:Javascript Password should not contain user's account name or parts of the user's full name that exceed two consecutive charactersJavascript 密码不应包含超过两个连续字符的用户帐户名或用户全名部分
【发布时间】:2012-08-03 20:16:54
【问题描述】:

我需要实现客户端密码验证,以便密码不应包含用户的帐户名或超过两个连续字符的用户全名部分。

我在客户端公开用户名和全名。但到目前为止,我无法弄清楚在客户端实现的正则表达式或任何其他方法。

例子

username: test20@xyz.com
password: Usertest123 --> this should fail the validation since it contains "test" in both password and username.

【问题讨论】:

  • 这听起来不像是正则表达式。 AFAIK,我认为你需要用好的老式代码来解决这个问题
  • 完成您所要求的唯一方法是将用户名和全名分成 3 个字符的块,然后进行一堆 indexOf 检查。然而,由于很多原因,这种方法很愚蠢。您这样做是因为明确的业务需求吗?如果没有,有更好的方法来诱使用户输入密码熵。
  • +1 这是一个合理的问题。
  • 这些是强加给用户的可怕的密码规则。
  • @Tom:如果它表现出一些努力首先解决它会是一个更好的问题。

标签: javascript jquery regex passwords


【解决方案1】:

我只能这么想:

var name = "test20@xyz", password = "usertest123"

var partsOfThreeLetters = name.match(/.{3}/g).concat(
                           name.substr(1).match(/.{3}/g),
                           name.substr(2).match(/.{3}/g) );
new RegExp(partsOfThreeLetters.join("|"), "i").test(password); // true

但我认为正则表达式在这里不是合适的工具,因为它需要转义等。您最好使用简单的substr/indexOf 算法(请参阅JavaScript case insensitive string comparisonHow to check whether a string contains a substring in JavaScript?)。

【讨论】:

  • 这里不情愿 +1,但这只是因为这是对 OP 问题的合理回答……而不是因为我认为这是一个特别好的主意。事实上,我现在很头疼。
  • 谢谢,我采用正则表达式方法的问题是要与我的客户端javascript验证库保持一致。我已经在服务器端实现了逻辑。但是有时错误响应需要很长时间才能响应,从而造成糟糕的用户体验。因此,为了更快的错误响应,我需要采用这种方法。感谢您的回答。
  • 你能告诉我们服务器端的逻辑吗? js应该是一样的
猜你喜欢
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2013-09-27
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多