Вы можете использовать более простое регулярное выражение.
<?php
$tests = [ '0',
'0.0',
'0.00',
'0.000',
'00',
'00.0',
'00.00',
'00.000',
'0.',
'00.',
'0.0000',
'00.0000'
];
$regex_pattern = '/^\d{1,2}(\.\d{1,3})?$/';
foreach($tests as $each_test){
echo $each_test," -----------> ",var_dump(1 === preg_match($regex_pattern,$each_test)),"<br/>";
}
ВЫХОД:
0 -----------> bool(true)
0.0 -----------> bool(true)
0.00 -----------> bool(true)
0.000 -----------> bool(true)
00 -----------> bool(true)
00.0 -----------> bool(true)
00.00 -----------> bool(true)
00.000 -----------> bool(true)
0. -----------> bool(false)
00. -----------> bool(false)
0.0000 -----------> bool(false)
00.0000 -----------> bool(false)