Вы можете решить эту проблему, заставив первую цифру отличаться от 0 с помощью '/^[1-9][0-9]*$/'
С вашим списком примеров:
foreach (array('1', '50', '333', '0', '01', 'abc') as $var) {
echo $var.': '.(preg_match('/^[1-9][0-9]*$/', $var) ? 'true' : 'false')."\n";
}
Этот скрипт дает следующие результаты:
$ php test.php
1: true
50: true
333: true
0: false
01: false
abc: false