PHP:检查输入是否为有效数字的最佳方法?


71

检查输入是否为数字的最佳方法是什么?

  • 1-
  • +111+
  • 5xf
  • 0xf

这些数字应该无效。仅数字,例如:123、012(12),正数应有效。这是mye当前代码:

$num = (int) $val;
if (
    preg_match('/^\d+$/', $num)
    &&
    strval(intval($num)) == strval($num)
    )
{
    return true;
}
else
{
    return false;
}

不要在代码的第一行上加上(int)!将其转换为(string)然后使用ctype_digit($ num)的字符串比int更好(手册php.net/ctype_digit中的proff )!
弗拉基米尔Ch

Answers:


75

ctype_digit 正是为此目的而建造的。


1
在第一行中它$ num =(int)$ val; 如果转换为字符串,则$ num =(string)$ val; 没关系,因为它是手动输入的!
弗拉基米尔Ch


19

filter_var()

$options = array(
    'options' => array('min_range' => 0)
);

if (filter_var($int, FILTER_VALIDATE_INT, $options) !== FALSE) {
 // you're good
}

5
+1,因为这是比ctype_digit
rdlowrey



1

最安全的方法

if(preg_replace('/^(\-){0,1}[0-9]+(\.[0-9]+){0,1}/', '', $value) == ""){
  //if all made of numbers "-" or ".", then yes is number;
}

这是行不通的,例如,OP的“ 1-”示例不应视为有效数字,但是根据此正则表达式,它是有效数字。
rowatt

@rowatt \-代表负数。我将其更改为在乞求时仅考虑“-”
Kareem
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.