I need a Regular Expression allowing user to input numbers, plus, minus and parentheses.
User can only input:
- At most one open parenthesis ‘(‘.
- At most one close parenthesis ‘)’.
- At most one plus ‘+’
- As many minus ‘-‘ but not after each other.
- Exactly 11 numbers.
Here are valid inputs:
(0)+12-3-4-56-7890
+)0(12345-678-90
+01234567890
+(01234567890)
01234567890
-01-234+5678-90
(01234567890)
)01234567890(
And following are not valid:
0123456--7890
0((1234567890
01234567890))
++01234567890
123456
++123456789
I’m using C# for programming and if it helps order of open and close parentheses can become mandatory too. so )01234567890( will not be valid.
Thanks in advance
This regex passes your examples, but might not be exactly what you’re looking for. It should point you in the right direction.
However, this is very confusing and fairly inefficient. I bet the regex could be rewritten to be much quicker, but won’t be much easier to understand.
I suggest that you follow MisterJack’s suggestion instead of pursue a regex. It’ll be easier to maintain.
EDIT
I’ve consolidated the parentheses and plus symbol rules into one negative lookahead using a backreference. This also restricts the number of parens and pluses to just one of each. I couldn’t get it to restrict to just a certain set of characters, but you might be able to do that in a second pass with another regex.
I tried a negative and positive lookahead to restrict the characters, but couldn’t get it to work right. I also tried to replace \D with [()+-] but that didn’t work either. Maybe someone else will add a comment to show how to restrict the characters. I’d sure love to see how someone else does it in this regex.