Regexp na zakresy liczb

0

Potrzebuję zwalidować pole, do którego wpisuję liczby, albo zakresy liczb. Podobne pole jest zwykle przy wyborze drukowanych ston w aplecie drukarki (tak żeby zobrazować problem). Do pola można wpisywać liczby oddzielone przecinkami i zakresy z minusem pomiędzy liczbami, np:

1, 3, 5,7-19,20-23, 27

Spacje też mogą się znaleźć, ostatecznie będą pominięte. Ktoś może robił coś podobnego i chciałby się podzielić takim regexpem?
Ponadto zastanawiam się jak obsłużyć błąd walidacji. Zakładam, że pole początkowo jest puste, potem wpisuje się prawidłowy ciąg znaków i jeżeli teraz zostanie dopisany nieprawidłowy znak, to co zrobić? Myślę, żeby przy sprawdzaniu powrócić do ostatniej poprawnej wartości, ale nie jestem przekonany.

1

w AWK działa coś takiego:

/^[[:digit:]]+(-[[:digit:]]+){0,1}(\s*,\s*[[:digit:]]+(-[[:digit:]]+){0,1})*$/

w PCRE pewnie też zadziała, ale można użyć \d zamiast :digit: i chyba ? zamiast {0,1}. Z kolei w sedzie chyba trzeba wyescapować plusy. Ale pewnie ciebie dotyczy PCRE.

Ale to nie wszystko, bo zakresy pewnie sam musisz zwalidować czy najpierw idzie jedna wartość potem druga.

1

Myślę, żeby przy sprawdzaniu powrócić do ostatniej poprawnej wartości, ale nie jestem przekonany.
Mnie tam by mocno denerwowały jakby mi ktoś cofał to co wpisałem bez jakiegoś pytania. Zablokuj możliwość wpisania innych znaków niż te możliwe i daj jedynie komunikat jeżeli jest błąd walidacji.

Regex pisany na szybko, pewnie można prościej. Zakładam, że w zakresach nie można wpisać spacji.

Btw. https://regexr.com/ tutaj fajnie się pisze/sprawdza regexy.

Edit:

^(\d+([-]\d+)?[ ]*)([ ]*,[ ]*\d+([-]\d+)?)*$

1 użytkowników online, w tym zalogowanych: 0, gości: 1