Ваше регулярное выражение: @^(?:[1-9][0-9]*)|0$@
- говорит, совпадают те числа, которые начинаются
с
1-9
, за которым следует любая цифра 0
или
больше раз ИЛИ
- соответствует тем числам, которые заканчиваются на
0
.
Очевидно, -0
удовлетворяет условию 2, поэтому вы получите совпадение.
Необходимое регулярное выражение: @^(?:[1-9][0-9]*|0)$@
, который соответствует 0
или любому другому +ve
номеру без начального 0
. Если разрешены начальные 0, то все, что вам нужно проверить, это то, содержит ли ввод цифры, для которых вы можете использовать: ^\d+$
, как отмечает Марк.
Кроме того, почему бы просто не сделать простую проверку, такую как:
if($input >= 0)
// $input is non -ve.