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