I'm trying to match strings that either:
- Contains between 9 and 15 numbers (Only numbers)
- Contains between 6 and 15 numbers letters (it must contain both, numbers and letters. Only letters is not a valid option).
I have the following regex: \b([0-9]{9,15})|([A-Za-z0-9]{6,15})\b which fails because the second part allows you to have a string with 6 numbers or 6 letters only.
Should be valid:
- 123456789
- 12345678Y
- Y234Y2
Should not be valid:
- 12345678
- 123X4
- ABCDEFGHYJ
CodePudding user response:
You can use
^(?:[0-9]{9,15}|(?=[a-zA-Z]*[0-9])(?=[0-9]*[a-zA-Z])[A-Za-z0-9]{6,15})$
See the regex demo.
Details:
^- start of string(?:- start of a non-capturing group:[0-9]{9,15}- nine to 15 digits|- or(?=[a-zA-Z]*[0-9])(?=[0-9]*[a-zA-Z])[A-Za-z0-9]{6,15}- six to 15 alphanumeric chars with at least one digit and at least one letter
)- end of the group$- end of string.
