0

我有一个正则表达式,它在除 IE6 之外的所有浏览器中都能正常工作。从研究 IE6 不支持前瞻断言。无论如何我可以将以下表达式重写为跨浏览器吗?

密码必须介于 8 到 20 个字符之间,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字

我正在使用 .Net 和正则表达式验证器。

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

2 回答 2

0

坦率地说,如果您被迫为 IE6 编写代码,那么我会避免在这方面过于聪明。做你需要做的,让它可用​​。

我会考虑的选项:

  1. 将正则表达式拆分为三个单独的查询。不再需要前瞻。它会更慢更混乱,我知道你宁愿正确编码,但如果我们想要支持 IE6,这些是我们做出的牺牲。它会起作用,并且它不应该对用户产生任何明显的影响。

  2. 忘记尝试在 Javascript 中执行此操作,只需在服务器端进行验证即可。鉴于这显然是一个仅供内部使用的网站(没有人会写一个支持 IE6 的外部使用网站),你可能会放弃像响应式 UI 这样的细节,特别是对于像这样的边缘功能密码管理。

最后,请向贵公司强调 IE6 已过时。Microsoft 将在 2014 年初停止对它的所有支持:此时,发现的任何安全问题(并且会有很多)都将无法解决。因此,您可以确定它们将成为恶意软件的攻击目标:在您的网络中安装 IE6 将成为您无法想象的安全噩梦。你有一年的时间升级。如果您现在还没有开始计划,您很可能会错过目标,并且您被黑客入侵。

假设您的公司有一点点意义,并且升级确实发生了,那么值得记住的是,您现在编写的任何 IE6 特定代码都只有有限的保质期。所以我将重复我一开始所说的:做你需要做的,让它对 IE6 用户可用;但不要花太多精力让它对他们有好处

于 2012-07-06T21:40:04.090 回答
-1

你有错误的正则表达式,使用这个:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}$
于 2012-07-05T15:34:44.767 回答