Reputation: 57
Good afternoon, I am creating a form with a number reservation field, for the user to pick. The system i had would only allow the reservation number by number, example: 1,2,3
and it would book the numbers 1,2 and 3.
Now i would like to add the option to book several numbers at once, example: 1-5,9,10
and in this case it would book numbers 1 to 5, 9 and 10.
I'm using the following regex code, but it's not working as I want
^\d{1,5}(?:-\d{1,5})*(?:,\d{1,5})*(?:,\d{1,5}-\d{1,5})*(?:-\d{1,5},\d{1,5})*$
The problem with this code is whenever the user inserts two 1-3,4-6
it only allows one more number. For example 1-3,4-6,2,3
shows error when the ,3
is inserted.
There is also a problem where it allows to write several dashes without commas
example 1-3-6-8-9
Upvotes: 0
Views: 70
Reputation: 89584
perhaps something like this:
\A\d{1,5}(?:-\d{1,5})?(?:,\d{1,5}(?:-\d{1,5})?)*\z
The idea:
(?:-\d{1,5})?
(and follows the first number)Note that a problem can't be solved by regex since 6-4
or 1-5,2,3,4
are always possible. So you will need sooner or later to explode the string and to check if numbers and ranges are coherent.
Upvotes: 1