Regex: change the order of the controls
I would like to check if a string contains:
- at least 1 number
- at least 2 characters (uppercase or lowercase)
This is the regex I though I might use:
(?=(?:.*?\d))(?=(?:.*?[A-Za-z]){2})
With aa1 the test gives a false statement, while with a1a or 1aa it gives a true result.
The strange thing is that if I change the order of the controls in the regexp:
(?=(?:.*?[A-Za-z]){2})(?=(?:.*?\d))
all 3 of the test开发者_如何学Go string I used wives a true value.
How is it possible?
Thanks
You wouldn't happen to be writing this in JavaScript and testing in Internet Explorer, would you? That configuration has a known bug that causes this kind of error.
It is not strange. Your first regex checks if there is one number followed somewhere by 2 chars. The second one checks it in the other way. You need to take both cases in account.
Something like this should work (not tested)
/(\d(?:.*?)[a-z]{2})|([a-z]{2}(?:.*?)\d)/i
Try this:
(?=\D*\d)(?=[^A-Za-z]*[A-Za-z][^A-Za-z]*[A-Za-z])
Or a little more compact:
(?=\D*\d)(?=(?:[^A-Za-z]*[A-Za-z]){2})
精彩评论