【问题标题】: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

【问题讨论】:

    标签: php regex integer isinteger


    【解决方案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' ) ) 导致误报。
    猜你喜欢
    • 2021-09-15
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2014-03-03
    • 2016-02-18
    • 2020-06-27
    相关资源
    最近更新 更多