$re = qr[^\s*(?:\d+-\d+)(?:\s*,\s*\d+-\d+)*\s*$];; print "$_ : ", $_ =~ $re ? 'ok' : 'bad' for '1-5, 20-250, 37000-41000', '1-25', '1-25,67-324', '1-15, 76-102, 56-98', '1-25,28-43.5', '1-2a, 45-98';; 1-5, 20-250, 37000-41000 : ok 1-25 : ok 1-25,67-324 : ok 1-15, 76-102, 56-98 : ok 1-25,28-43.5 : bad 1-2a, 45-98 : bad