检查字符串是不是为整数(包括负数) 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,这意味着它只能包含数字。我还需要对此应用相同的逻辑,以便它为 负浮点数

返回 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的主要内容,如果未能解决你的问题,请参考以下文章

java怎么计算一个整数长度(不含负数符号)?

获取码值(各种类型字符(中英)的ASCII)和进制转换系统(包括正负数小数)

正则表达式 可以输入负数、正数、小数(小数保留一位)。

检查字符串是不是为整数

PHP“判断回文数”算法问题

在 Python 2.x 中,是不是有办法检查字符串是不是可以转换为整数? [复制]