Regular Expressions are a always tricky and sometimes they stir the mind. I was constructing a regular expression for following conditions:
- String should min of 3 characters and max of 6 characters
- First three characters can be [a-zA-Z]
- Either of 4,5 or 6th character should be [0-9]
- Remaining characters can be [a-zA-Z] but not [0-9]
This query troubled me like anything. I tried so many combinations but could not make it. The main problem was making sure that there is one number in the 4,5 or 6th position and limiting it to a max of 6 and min of 4 characters in length.
I came across a guy who has dveloped an online RegEx Tester and he solved the problem in no time. You can use the online RegEx Tester thru this link.
So finally the RegEx is as follows:
^(?=.*[0-9])(?!.*[0-9].*[0-9])(?!.*[0-9].*[0-9].*[0-9])[a-zA-Z]{3}[a-zA-Z0-9]{1,3}$
The above regex works for the specified condions and mes sure that there is only one digit in the string.
Following is an analysis of the same:
The RegEx two blocks: first block checks whether a certain pattern exists in the whole string and second block checks for [a-zA-Z] three times and [a-zA-Z0-9] one to three times.
^ and $ make sure that the pattern is verified from beginning to the end of the given string.
The first block:
(?=.*[0-9])(?!.*[0-9].*[0-9])(?!.*[0-9].*[0-9].*[0-9])
The ?= looks ahead in the whole string whether there exists any character of [0-9]. The ?! looks ahead in the whole string whether there is not two or three [0-9]. That means this block makes sure that the whole string contains only one digit [0-9] and not more than that. But it will not verify where exactly the [0-9] should come. It will be taken care by the second block.
The second block:
[a-zA-Z]{3}[a-zA-Z0-9]{1,3}
In the second block, first part verifies whether the first three characters are [a-zA-Z] once it is satisfied, second part checks the next 1-3 characters contain [a-zA-Z0-9].
Isn’t that a wonderful RegEx..
You can visit this link for a quick reference on Regular Expressions.
If you have any regular expression that is eating your head then probably this forum can solve it.. give it a try.