Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP的正则表达式,任何包含数字0-9的非零数字_Php_Regex_Preg Match - Fatal编程技术网

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

使用PHP的正则表达式,任何包含数字0-9的非零数字,php,regex,preg-match,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”部分之外,我现在所做的一切都有效 我看了这本指南(),但没能给出一个完整的答案 任何帮助都将不胜感激,谢谢 /^[1-9][0-9]*$/ 意思是:一个非零数字后接任意数量的数字(包括零)。只需先检查非零

我有一个正则表达式:

/^[0-9]+$/i
在本代码中使用:

preg_match('/^[0-9]+$/i', $var);
我希望以下是真实的: $var=1; $var=50; $var=333

以下是错误的: $var=0; $var=01; $var='abc'

我想除了“0”部分之外,我现在所做的一切都有效

我看了这本指南(),但没能给出一个完整的答案

任何帮助都将不胜感激,谢谢

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

意思是:一个非零数字后接任意数量的数字(包括零)。

只需先检查非零数字,然后再检查任意数量的其他数字即可

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

通过使用
'/^[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

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

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

其中任何一个都可以。第一个数字或多或少应该是自解释的,第二个数字使用a来确保第一个数字不是0

请注意,regex不是为数字解析而设计的。还有其他方法可以更快、更灵活地进行数字格式解析。例如:

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

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

就像PS:如果不使用任何字母,则不需要
i
修饰符;)你不需要括号。在这种情况下,他们没有做任何事情。您的最后一个代码与正则表达式不匹配(在许多方面):)例如,正则表达式与0xABC或0.034e-19或01不匹配。@NikiC-这是一个公平的观点,尽管最后一个代码(编辑后)会因为前导零而阻止这些代码。然而,正则表达式会阻止1.234,而我发布的PHP则不会。我打算在最后一部分确认regex不是用于数字解析的,因此我对其进行了编辑以使其更清楚。$val!=0检查零值,而不是前导零。此外,您通常最不希望的事情是允许人们以科学记数法(十六进制或oct)输入数字。特别是如果您需要在事后向他们解释为什么他们的“012”得到的是“10”而不是“12”。@NikiC-PHP代码只是数字解析的一个示例,并不意味着等同于正则表达式。
if (is_numeric($val) && $val != 0)