我想检查字符串是否包含:
这是我可以使用的正则表达式:
(?=(?:.*?\d))(?=(?:.*?[A-Za-z]){2})
使用aa1时,测试会给出错误的陈述,而使用a1a或1aa则会给出真实的结果。
奇怪的是,如果我改变了正则表达式中控件的顺序:
(?=(?:.*?[A-Za-z]){2})(?=(?:.*?\d))
我使用的所有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})