【问题标题】:Is there a way to check for integers when there are commas in the value?当值中有逗号时,有没有办法检查整数?
【发布时间】:2016-06-28 17:09:45
【问题描述】:

存储在我的数据库表中的典型值如下:

 $value1 = "123,232,453";
 $value2 = "123,232,453.45";

逗号和小数。我必须在数据上传后检测数据输入是否有任何错误。上传过程对我来说是一个黑匣子,很可能那里有一个 number_format 。

我试过了

  ctype_digit($value1)

检查,但逗号没有任何帮助。

当值中有逗号时,有没有办法检查整数?

【问题讨论】:

  • 去掉逗号然后检查?
  • if(ctype_digit(str_replace(",","",$value)))
  • 您应该将实际数字存储在您的数据库中,尤其是当您需要将这些值视为数字时。 numbers-as-strings 只会迫使您重复进行 string->number 转换,性能会很痛苦。在进行 OUTPUT 时保存人类可读的格式。

标签: php integer


【解决方案1】:

您可以通过将输入视为字符串来简单地去掉逗号:

$value1 = str_replace(',', '', $value1);

然后您可以使用正则表达式检查整数:

if (preg_match('/^-?\d+$/', $value1)) {
    ...
}

或者,如果允许使用小数,您可以使用is_numeric()

if (is_numeric($value1)) {
    ...
}

【讨论】:

  • is_numeric 对整数无效
  • 我知道 OP 在问题中提到了整数,但其中一个示例输入是 123,232,453.45,它不是整数,但仍被 OP 视为有效输入。
  • 您可以将,\d 放在一个字符类中,然后您就不需要剥离了。
  • @chris85 是的。这会使正则表达式复杂化,因为我们需要确保诸如",,," 之类的输入被认为是无效的。也许得到的正则表达式是/^-?\d+[0-9,]*$/
  • 哦,是的,没想到只有逗号输入。
【解决方案2】:

检查逗号:

if(strpos($value, ",")){
     // there is a comma
}else{
     // there is no comma
}

【讨论】:

    【解决方案3】:

    使用更实用的样式并避免使用正则表达式可以这样做:

    $values[] = "123,232,453";
    $values[] = "123,232,453.45";
    $values[] = "123,232,453.45b";
    
    $result = array_map(
        function ($val) {
            return array_reduce(
                explode(",", $val),
                function ($carry, $item) {
                    return $carry && filter_var($item, FILTER_VALIDATE_FLOAT) !== false;
                }, true
            );
        }, $values
    );
    
    var_dump($result);
    

    这将在 cli 上输出以下内容。最后一个元素将为 false,因为最后一个测试用例包含无效数字。

    array(3) {
      [0] =>
      bool(true)
      [1] =>
      bool(true)
      [2] =>
      bool(false)
    }
    

    对于values 中的所有项目,它会在, 处分解项目,然后使用过滤器检查每个结果是否是有效的浮点数/数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2021-08-20
      • 2012-03-25
      • 2020-11-26
      • 2013-07-23
      • 1970-01-01
      • 2020-05-28
      相关资源
      最近更新 更多