You can try ^(?!0\*0)(?:\d+\*\d+,?)+$
.
^
and$
ensure that the entire string matches.(?!0\*0)
is a negative look ahead to check that the string is not0*0
.(?:
and)
indicates that the contents are a non-capturing group\d+
matches one or more digits (0–9)\*
matches a literal*
character\d+
matches one or more digits (0–9),?
optionally match a literal comma+
match one or more of the preceding pattern ((?:\d+\*\d+,?)
)
Known bug: 50*520*4
matches.
Edit: Found a workaround for the bug.
^(?:(?!0\*0)\d+\*\d+,)*(?:(?!0\*0)\d+\*\d+)$
Edit: You edited your question to make it clear that you do not want to match 50*5,0*0
. This can be achieved by putting the negative lookahead into the repeated match as ^(?:(?!0\*0)\d+\*\d+,?)+$
Edit: You mentioned that you don’t want to match 0*[anything]
and [anything]*0
. Try ^(?:(?!0\*)\d+\*(?!0,)\d+,)*(?:(?!0\*)\d+\*(?!0$)\d+)$
.
Play around with the latest regex with the workaround on this RegExr demo.
2
solved javascript regex to validate the input