我有这个正则表达式:
/^[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),但未能提出完整的答案。
任何帮助将不胜感激,谢谢!
答案 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]*$/'
列出例子:
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