我注意到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不是数字?
答案 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可能是个好主意。