正则表达式使用PHP,任何包含数字0-9的非零数字

时间:2011-09-21 16:22:32

标签: php regex preg-match

我有这个正则表达式:

/^[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 个答案:

答案 0 :(得分:15)

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

表示:非零数字后跟任意数字的数字(包括零)。

答案 1 :(得分:4)

首先检查非零数字,然后检查任意数量的其他数字

preg_match('/^[1-9][0-9]*$/', $var);

答案 2 :(得分:2)

有几种方法可以做到这一点:

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

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

其中任何一个都应该没问题。第一个应该或多或少是不言自明的,第二个使用zero-width negative lookahead assertion来确保第一个数字不是0。

请注意,正则表达式不是为数字解析而设计的。还有其他方法可以在数字格式方面更快,更灵活。例如:

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

...应该选择任何非零数字,包括小数和科学记数法。

答案 3 :(得分:1)

您可以通过强制第一个数字与'/^[1-9][0-9]*$/'

的0不同来解决此问题

列出例子:

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