PHP“ is_numeric”接受“ E”作为数字

时间:2018-12-19 18:59:48

标签: php string numbers isnumeric

我注意到PHP is_numeric()接受“ E”作为数字。 我有一个字符串:“ 88205052E00”,我希望结果是:非数字

这是我测试过的代码。

<?php

$notnumber = '88205052E00';

if(is_numeric($notnumber)) {
    echo $notnumber . ' is a number';
} else {
    echo $notnumber . ' is NOT a number';
}

?>

上面的代码给出结果:

88205052E00 is a number

如何获取结果为: 88205052E00不是数字

5 个答案:

答案 0 :(得分:2)

只需使用正则表达式:

<?php
if (preg_match("/^\-?[0-9]*\.?[0-9]+\z/", $notnumber)) {
    echo "$notnumber is numeric\n";
} else {
    echo "$notnumber is not numeric\n";
}

结果:

   1234 is numeric
1234E56 is not numeric
  -1234 is numeric
  .1234 is numeric
 -.1234 is numeric
 -12.34 is numeric

答案 1 :(得分:2)

如果有帮助,我会保留答案,但要指出的是ctype_digit的缺点在于它不喜欢-.

那么您很可能希望使用ctype_digit来检查提供的字符串,文本中的所有字符是否都是数字。

为is_numeric的位置-查找变量是数字还是数字字符串

<?php

$s = "88205052E00";

if(ctype_digit($s)){
    echo "Yes";
} else {
    echo "No";
}

返回编号

答案 2 :(得分:1)

E由于有浮点数(http://php.net/manual/en/language.types.float.php)而有效。

如果您出于某种原因不想允许E,则可以独立进行检查:

if (strpos(strtolower($notnumber), 'e') === false && is_numeric($notnumber))

这确保没有E并且它也是数字。

答案 3 :(得分:1)

假设您要确保该字符串是有效的整数,则可以使用filter_var

FirstPageView.WhenActivated

结果:

$tests = ['1', '1.1', '1e0', '0x1'];
foreach($tests as $str) {
    $int = filter_var($str, FILTER_VALIDATE_INT);
    if ($int === false) {
        echo $str . ' is not an integer' . PHP_EOL;
    } else {
        echo $str . ' is an integer' . PHP_EOL;
    }
}

答案 4 :(得分:0)

让我们检查the definition

  

查找给定变量是否为数字。数字字符串组成   可选符号,任意位数,可选小数部分和   可选的指数部分。因此+0123.45e6是有效的数值。   十六进制(例如0xf4c3b00c)和二进制(例如0b10100111001)表示法   不允许。

floating point literals的关系很明显,但是,它们与integer literals有什么关系?

该手册没有明确说明用例是什么,但总的来说,它是一个辅助工具(以确保您可以将字符串化数据提供给期望数值的函数),而不是适当的形式验证器。如果在不期望88205052E00的环境中收集输入,那么期望(并生成)本地化数据并实现locale-aware solution可能是个好主意。