Regex с использованием PHP, любое ненулевое число, содержащее цифры 0-9 - PullRequest
4 голосов
/ 21 сентября 2011

У меня есть это регулярное выражение:

/^[0-9]+$/i

Используется в этом коде:

preg_match('/^[0-9]+$/i', $var);

Я хочу, чтобы следующее было верно: $ var = 1;$ var = 50;$ var = 333;

И следующее ложное: $ var = 0;$ var = 01;$ var = 'abc';

Я думаю, что у меня работает до сих пор, за исключением части "0" ..?

Я прошел это руководство (http://www.phpf1.com/tutorial/php-regular-expression.html), ноНе удалось найти полный ответ.

Любая помощь будет признательна, спасибо!

Ответы [ 4 ]

15 голосов
/ 21 сентября 2011
/^[1-9][0-9]*$/

Означает: ненулевая цифра, за которой следует произвольное количество цифр (включая ноль).

4 голосов
/ 21 сентября 2011

просто сначала проверьте ненулевую цифру, а затем любое количество других цифр

preg_match('/^[1-9][0-9]*$/', $var);
2 голосов
/ 21 сентября 2011

Есть несколько способов сделать это:

/^[1-9][0-9]*$/

или

/^(?!0)[0-9]+$/

Любой из них должен подойти.Первый должен быть более или менее понятен, а второй использует отрицательное прогнозное значение нулевой ширины , чтобы первая цифра не была равна 0.

Обратите внимание, что регулярное выражение не предназначено для анализа чисел. Существуют другие способы сделать это, которые будут быстрее и более гибкими с точки зрения числового формата.Например:

if (is_numeric($val) && $val != 0)

... должен подобрать любое ненулевое число, включая десятичные и научные записи.

1 голос
/ 21 сентября 2011

Вы можете решить эту проблему, заставив первую цифру отличаться от 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
...