Регулярное выражение для соответствия неотрицательным целым числам в PHP?

Я, кажется, заставляю это работать со следующим regexp preg_match():

@^(?:[1-9][0-9]*)|0$@

Все же странно, что это соответствует -0, рассмотрение там нет - позволенный вообще в regexp. Почему?

То, что является более странным, является этим, если Вы переключаете части, разделенные на |:

@^0|(?:[1-9][0-9]*)$@

Это соответствует всем отрицательным целым числам такой как -2 и -10, и т.д.

Что я пропускаю здесь? Немного лучше regexp для неотрицательного целого числа?

7
задан Filipp W. 15 August 2019 в 11:58
поделиться

1 ответ

Ваше регулярное выражение: @ ^ (?: [1-9] [0-9] *) | 0 $ @

  1. говорит, что совпадают те числа, которые начинаются с 1- 9 , за которым следует любая цифра 0 или еще раз ИЛИ
  2. сопоставьте те числа, которые заканчиваются на 0 .

Очевидно, что -0 удовлетворяет условию 2, так что вы получите совпадение.

Вам нужно следующее регулярное выражение: @ ^ (?: [1-9] [0-9] * | 0) $ @

, которое соответствует 0 или любому другому ] + ve номер без ведущего 0 . Если разрешены ведущие 0, то все, что вам нужно проверить, это то, что ввод содержит цифры, для которых вы можете использовать: ^ \ d + $ , как упоминает Марк.

Также почему бы просто не выполнить простую проверку, например:

if($input >= 0)
 // $input is non -ve.
6
ответ дан 7 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: