Так что я не уверен на 100%, что правильно понимаю вопрос, поэтому я не могу быть уверен на 100%, что он будет работать во всех случаях, но вот что у меня есть.
([0-9]{2}\.[0-9]{2})|([0-9]*0\b)
a) 0 - верно
b) 51 - неверно
c) 50 - верно
d) 10,25 - верно
e) 10.2345 - true
Если "." находится между 2 числами или оканчивается на 0.
Вот пример: https://regex101.com/r/295QWt/1
Так что мой другой ответ, если число находится между 2 различными числами. На самом деле в этом случае я не думаю, что регулярное выражение является настолько полезным. В зависимости от языка использование регулярных выражений может быть даже медленнее.
if(value > min && value < max){return true;}