【问题标题】:Regular Expression voodoo in ASPASP 中的正则表达式巫术
【发布时间】:2011-11-17 19:54:24
【问题描述】:

啊,在这样的日子里我不付薪水是件好事。我将一些正则表达式模式从客户端 Javascript 复制到服务器端 ASP,电子邮件模式没有问题,但密码模式的相同功能今天让我的老板花了 6 个小时(我们的小秘密)。

Function validatePassword(strPass)
  Dim regEx
  Set regEx = new RegExp

  regEx.IgnoreCase = false
  regEx.global = false
  regEx.Pattern = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,10}$"
  ValidatePassword = regEx.Test(strPass)
End Function

这是一个简单的 1 上、1 下、1 位、6-10 个字符的模式,毫无疑问它应该匹配但前。 3DMM9igggg 返回 false,但 gDMM9igggg 返回 true。它在 JS 中运行良好,这里是:http://www.regular-expressions.info/javascriptexample.html,在我尝试过的其他几个测试器中。

WTF?谁能把眼睛借给我看一下?

谢谢

【问题讨论】:

  • 将密码限制为 10 个字符是邪恶和错误的。
  • 考虑到一些背景情况,我不同意(你不知道这个项目,为什么这么不灵活?)。大声喊叫是 62 个可能的字符的 10 次方。这几乎是千亿的可能性。此外,它还旨在限制您尝试破解的空间量。我采取了我的预防措施,但如果你想出一些新的东西或者我没有考虑到你只有 10 个字符来完成它。

标签: javascript regex validation vbscript asp-classic


【解决方案1】:

可能是您的特定 ASP 正则表达式引擎不像 javascript 引擎那样支持前瞻。某些引擎就是这种情况,根据此链接高级主题下的第 4 段:http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic13

第 5 段中还有一个基于前瞻密码测试的示例。

如果确实是引擎问题,一个简单但效率低下的解决方案是运行 3 次测试:一次测试上限,一次测试下限,一次测试包含长度测试的数字。

【讨论】:

  • 谢谢乔纳森。看起来你是对的,它数字。我被困在这个项目的 GoDaddy 服务器上,他们似乎决心让开发人员的生活尽可能艰难。他们的鲨鱼海滩卡通 500 错误页面怎么了? (旁白:如果它对任何人有帮助,请使用 web.config 文件来解决这个问题)即使是最简单的模式也无法使用 ?= 匹配。鲍勃帕森斯再次出击。啊。
  • 是的。只需使用三个测试。
  • 对于其中一些规则,为什么还要使用正则表达式?
  • @JoelCoehoorn,阿门。正则表达式可能很昂贵。
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 2021-06-08
  • 2015-12-09
  • 2012-03-15
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多