【问题标题】:Password regex works in chrome and firefox, but not IE7密码正则表达式适用于 chrome 和 firefox,但不适用于 IE7
【发布时间】:2011-01-13 16:05:09
【问题描述】:

以下正则表达式适用于 chrome 和 firefox,但不适用于 IE7:

^((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20})$

它需要包含至少 8 个字符,并且至少有一个大写字母和一个数字。当我在 IE7 中尝试这个时,我必须输入 14 个字符才能验证。有人可以解释一下为什么以及所有 3 种浏览器的正确表达方式是什么。

我正在使用 asp:RegularExpressionValidator 来验证密码。

【问题讨论】:

  • 困惑。这被标记为 C# 和 ASP.NET,所以大概这个正则表达式正在服务器端运行并且浏览器是无关紧要的?如果这是javascript,请标记它。
  • 好吧,正则表达式是一个 asp:RegularExpressionValidator,它是客户端验证。我相信默认情况下,正则表达式在客户端运行,除非我指定服务器端验证事件处理程序。如果我错了,请纠正我?
  • 如果问题出在 IE 而不是 firefox,它必须在客户端上运行。你甚至知道正在生成什么 HTML/JS 源代码吗?我认为您需要做更多的学习,而不仅仅是“正则表达式”。
  • 澄清一下,asp:RegularExpressionValidator 将生成运行客户端的 javascript 代码。因此,实际验证是在 javascript 中完成的。我建议你查看生成的 javascript 代码并尝试简化它,看看它在 IE 中哪里出错了。
  • 我刚刚使用了你的正则表达式,它在 IE 7/8 和 Asp.net RegularExpression 中工作。

标签: c# javascript asp.net regex client-side


【解决方案1】:
【解决方案2】:
str.length > 8
/[A-Z]/
/\d/

三个检查对一个怪物正则表达式。哪个更易于阅读且不会导致 IE 出现问题?

if( str.length > 8 && str.search(/[A-Z]/) != -1 && str.search(/\d/) != -1 )
{
   //Don't use big long regex when you don't need it
}

【讨论】:

  • 我是正则表达式的新手,所以我对你的回答有点困惑。
  • 解决办法是少用正则表达式。
  • @Xaisoft:他的意思是你应该做三个简单的检查,而不是仅仅想出一个正则表达式。正则表达式的新手有时认为正则表达式可以解决任何问题,或者使用正则表达式是最佳解决方案。正如 Stefan Kendall 的回答所示,单独进行每项检查要简单得多:首先检查字符串长度,然后检查是否存在一个大写字母,然后检查是否存在数字。 (您也可以只检查字母数字,进一步检查如下:^[A-Za-z0-9]+$
  • 我明白他在说什么,但我不明白如何将答案转换为 asp.net 正则表达式。
  • 但更大的问题是为什么这在 chrome 和 firefox 中运行良好,但在 IE7 中失败。
猜你喜欢
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多