I'm trying to limit the entries to a specific format.
If the entry has 5500 or 5100 such as 01\01-5500-000-00 then I want to have this:
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$
But if the entry has anything other than 5500 or 5100 I want to have this:
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$
How can this be accomplished with the if then else idea?
Conditional regex syntax is not supported by JavaScript regex engine, but it can be worked around with a non-capturing group containing 2 alternatives:
One with the positive look-ahead and
The second with the reversed, negative look-ahead.
This regex meets your criteria and is JavaScript compatible:
^(?:(?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-|(?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2})$
See regex demo
Let me break it down:
^
- Start of string(?:
(?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-
- First alternative with the (?=.*\b5[15]00\b)
look-ahead that requires a whole word 5500
or 5100
inside the string, and the first pattern you have|
- alternation operator(?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2})
- Second alternative that is prepended with the (?!.*\b5[15]00\b)
negative look-ahead that makes sure there is no 5100
or 5500
inside the string, and only then matches your second pattern.$
- end of string.