Я, кажется, заставляю это работать со следующим regexp preg_match()
:
@^(?:[1-9][0-9]*)|0$@
Все же странно, что это соответствует -0
, рассмотрение там нет -
позволенный вообще в regexp. Почему?
То, что является более странным, является этим, если Вы переключаете части, разделенные на |
:
@^0|(?:[1-9][0-9]*)$@
Это соответствует всем отрицательным целым числам такой как -2
и -10
, и т.д.
Что я пропускаю здесь? Немного лучше regexp для неотрицательного целого числа?
Ваше регулярное выражение: @ ^ (?: [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.