PHP验证成本金额小数点后2位

PHP验证成本金额小数点后2位,php,validation,Php,Validation,My api要求与订阅成本相关的所有数据在提交给DB之前必须采用正确的格式,因为客户将被收取该金额。以下规则适用 必须是数字,不带货币符号。使用验证是字符串($data['cost']) 不能为负数。使用$data['cost']2表示。我认为这是不对的。它应该是strlen($amount[1])==2),因为您要检查小数点后是否正好有2位数字。您编写的代码表示“小数点后超过2位数”,由>2表示。

My api要求与订阅成本相关的所有数据在提交给DB之前必须采用正确的格式,因为客户将被收取该金额。以下规则适用

  • 必须是数字,不带货币符号。使用
    验证是字符串($data['cost'])
  • 不能为负数。使用
    $data['cost']<0验证
  • 必须有两位小数,即使金额没有美分($100.00)

  • 验证需求3的最佳方式是什么?

    决定做一些非常直接的事情。如果成本中有小数点,请检查右边的位数。否则提交给DB

    $amount = explode('.', $data['cost']);
    if(isset($amount[1]) && strlen($amount[1]) > 2) {
       // response  
    }
    

    决定做一些非常直接的事情。如果成本中有小数点,请检查右边的位数。否则提交给DB

    $amount = explode('.', $data['cost']);
    if(isset($amount[1]) && strlen($amount[1]) > 2) {
       // response  
    }
    
    使用。优点是,无论您得到什么(0不够或过多),它都会以正确的格式保存

    number_format("1000000",2) // 1,000,000.00
    

    编辑:若要将其用于验证

    $num = $data['cost'];
    $check = number_format($num,2);
    if ($num == $check) return true;
    
    使用。优点是,无论您得到什么(0不够或过多),它都会以正确的格式保存

    number_format("1000000",2) // 1,000,000.00
    

    编辑:若要将其用于验证

    $num = $data['cost'];
    $check = number_format($num,2);
    if ($num == $check) return true;
    

    您使用的是哪种列?所有货币金额都使用十进制。那么,如果我向您发送
    100
    100.00
    ,又有什么关系呢?无论哪种方式,你都要将它存储为
    100.00
    。你使你的API难以使用。在这一点上,我不一定不同意你的观点。我假设验证小数点会导致.00出现。主要问题是如何限制php端的提交量?如果我得到一个100.235的量,让它通过,我会得到100.24分贝。我需要阻止它通过并只验证两位小数。您是将值作为字符串还是数字接受?您使用的是哪种列?对所有货币金额使用十进制。那么,如果我向您发送
    100
    100.00
    ,又有什么关系呢?无论哪种方式,你都要将它存储为
    100.00
    。你使你的API难以使用。在这一点上,我不一定不同意你的观点。我假设验证小数点会导致.00出现。主要问题是如何限制php端的提交量?如果我得到一个100.235的量,让它通过,我会得到100.24分贝。我需要阻止它通过,并只验证两位小数。您接受的值是字符串还是数字?问题是关于验证。您的代码基本上是相反的:让所有内容都通过。@alvarogonzález-“必须有两位小数,即使金额没有美分($100.00)。”所以OP希望用户总是输入两位小数?这就是我的理解。请检查OP在下面关于阻塞
    100.235
    的问题的评论。问题是关于验证的。您的代码基本上是相反的:让所有内容都通过。@alvarogonzález-“必须有两位小数,即使金额没有美分($100.00)。”所以OP希望用户总是输入两位小数?这就是我的理解。请查看OP在下面关于阻塞
    100.235
    的问题的评论。我认为这是不对的。它应该是
    strlen($amount[1])==2)
    ,因为您要检查小数点后是否正好有2位数字。你写的代码意思是“小数点后超过两位数”,用
    >2
    表示。我认为这是不对的。它应该是
    strlen($amount[1])==2)
    ,因为您要检查小数点后是否正好有2位数字。您编写的代码表示“小数点后超过2位数”,由
    >2
    表示。