正则表达式:更改控件的顺序

时间:2010-02-15 10:13:31

标签: regex

我想检查字符串是否包含:

  • 至少1个号码
  • 至少2个字符(大写或小写)

这是我可以使用的正则表达式:

(?=(?:.*?\d))(?=(?:.*?[A-Za-z]){2})

使用aa1时,测试会给出错误的陈述,而使用a1a或1aa则会给出真实的结果。

奇怪的是,如果我改变了正则表达式中控件的顺序:

(?=(?:.*?[A-Za-z]){2})(?=(?:.*?\d))

我使用的所有3个测试字符串都是真正的值。

怎么可能?

由于

3 个答案:

答案 0 :(得分:1)

你不会在JavaScript中编写这个并在Internet Explorer中进行测试,不是吗?该配置有known bug导致此类错误。

答案 1 :(得分:0)

这并不奇怪。你的第一个正则表达式检查是否有一个数字跟随某处是2个字符。 第二个以另一种方式检查它。您需要考虑这两种情况。

这样的事情应该有效(未经测试)

/(\d(?:.*?)[a-z]{2})|([a-z]{2}(?:.*?)\d)/i

答案 2 :(得分:0)

试试这个:

(?=\D*\d)(?=[^A-Za-z]*[A-Za-z][^A-Za-z]*[A-Za-z])

或者更紧凑:

(?=\D*\d)(?=(?:[^A-Za-z]*[A-Za-z]){2})