使用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)