Regex, Number or Empty
Solution 1
Either 4 digits or nothing:
^(?:\d{4}|)$
This is closest to what you were trying to do.
I would go for the following for a slightly shorter one:
^(?:\d{4})?$
^\d{4}|$
That regex means either:
^\d{4} OR $
The first will match just any string that starts with 4 digits while the second will report a match on everything (it matches the end of a string, and since no character is specified, it will match the end of all strings).
When you're using a group, you're getting:
Either ^(?:\d{4})$ or ^(?:)$ (notice that the 'limits' of the OR operator changed), which is then equivalent to either ^\d{4}$ or ^$
Solution 2
I think your approach is sound. You do need to keep operator precedence in mind though and use either
^(\d{4}|)$
or
^\d{4}$|^$
Solution 3
I don't think if it needs OR
^(\d{4})?$
Grant
Updated on July 24, 2022Comments
-
Grant 4 monthsCan someone show me how to match 4 digits or nothing in Regex? I have been using RegexBuddy and so far i have come up with this but the help text is saying 'Or match regular expression number 2 below - the entire match attempt fails if this one fails to match' in regards to the pattern after the pipe.
I would like either of the two to provide a positive match.
^\d{4}|$ -
Bob Vale about 9 yearsmight be worth explaining that^\d{4}|$would match1234abecause the $ is not included in the first match -
Jerry about 9 years@BobVale I might also add that^\d{4}|$as a whole will match anything because of$:)