I have a requirement to handle a regular expression for no more than two of the same letters/digits in an XSL file.
BBB
will fail, BB
is accepted)What I have so far
(?:[^a-zA-Z0-9]{1,2})
'?' matches/verifies the zero or single occurrence of the group preceding it. Check Mobile number example. Same goes with '*' . It will check zero or more occurrences of group preceding it.
A regular expression followed by an asterisk ( * ) matches zero or more occurrences of the regular expression.
A repeat is an expression that is repeated an arbitrary number of times. An expression followed by '*' can be repeated any number of times, including zero. An expression followed by '+' can be repeated any number of times, but at least once.
This regex will do it: ^(?!.*([A-Za-z0-9])\1{2})(?=.*[a-z])(?=.*\d)[A-Za-z0-9]+$
Here's the breakdown:
(?!.*([A-Za-z0-9])\1{2})
makes sure that none of the chars repeat more than twice in a row.
(?=.*[a-z])
requires at least one lowercase letter
(?=.*\d)
requires at least one digit
[A-Za-z0-9]+
allows only letters and digits
EDIT : removed an extraneous .*
from the negative lookahead
(Partial solution) For matching the same character repeated 3 or more times consecutively, try:
([a-zA-Z0-9])\1{2,}
Sample matches (tested both here and here): AABBAA
(no matches), AABBBAAA
(matches BBB
and AAA
), ABABABABABABABA
(no matches), ABCCCCCCCCCC
(matches CCCCCCCCCC
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With