检查字符串是不是为整数(包括负数) PHP
Posted
技术标签:
【中文标题】检查字符串是不是为整数(包括负数) PHP【英文标题】:Check to see if string is an integer (includes negative numbers) PHP检查字符串是否为整数(包括负数) PHP 【发布时间】:2013-04-17 18:04:22 【问题描述】:下面的函数检查字符串是否为整数,这意味着它应该只包含数字。但它不检查数字是否为负(负数也应该返回真,因为它们是整数)。
function validateInteger($value)
//need is_numeric to avoid $value = true returns true with preg_match
return is_numeric($value) && preg_match('/^\d+$/', $value);
我进行了测试并得到了结果:
'12.5' => FALSE
12.5 => FALSE
'a125' => FALSE
'125a' => FALSE
'1a2.5' => FALSE
125 => TRUE
'abc' => FALSE
false => FALSE
true => FALSE
'false' => FALSE
'true' => FALSE
null => FALSE
'null' => FALSE
'1231' => TRUE
-1231 => FALSE (SHOULD RETURN TRUE)
'-1231' => FALSE (SHOULD RETURN TRUE)
我不想使用itnval() < 0
。我更喜欢正则表达式来检查负数。
谢谢
编辑:
我还有一个函数validateFloat
,如果给定的数字是浮点数,则返回true,这意味着它只能包含数字和点。我还需要对此应用相同的逻辑,以便它为 负浮点数
【问题讨论】:
【参考方案1】:is_int
还不够好?
filter_var($input, FILTER_VALIDATE_INT)
应该具有相同的效果,但也适用于字符串。
【讨论】:
但如果 value 是一个字符串但包含所有数字,则返回 false。在我的情况下,'125' 和 '-1231' 将返回 false filter_var($input, FILTER_VALIDATE_INT) 如果 $input = true 则返回 true。在这种情况下它应该是错误的 @GGio 尝试添加选项FILTER_NULL_ON_FAILURE
@GGio 实际上它似乎会被转换为int
,所以我认为你只需要做一个明确的检查$input !== true && filter_var(...
filter_var( '-010', FILTER_VALIDATE_INT )
导致误报,而(int)'-010'
返回-10
。【参考方案2】:
只需使用is_numeric(abs($val))
【讨论】:
@GGio 然后is_numeric($val) && is_numeric(abs($val))
我的 DownVote:is_numeric( abs( '125a' ) )
导致误报。以上是关于检查字符串是不是为整数(包括负数) PHP的主要内容,如果未能解决你的问题,请参考以下文章