1

我正在使用 PHP,我想检查给定用户提交的数字输入是否太大或太小。

  • 我将数据库中的金额存储为 64 位整数(将它们乘以 10^8 以避免将来计算中的舍入错误)。我正在限制数量,使其不能超过以下精度:小数点后不超过 4 个数字。此外,由于用户输入的上限应为 9900 万,我还想指定不超过 8 个小数点前的数字。我怎样才能巧妙地做到这一点?

我目前的方法似乎有点hack-ish:

代码:

//Check for existence of decimal point in string using strpos

//explode the string by the decimal point

//do a strlen on both the strings and check they dont exceed 8 and 4 respectively

//if no decimal point, simply do a strelen and check it's not greater than 8
  • 另外,我不希望输入的数据小于 0.0001。我精通用于网页设计的 php,不熟悉 php 的数学函数,有没有简单的方法来处理这个问题?

感谢您的任何提示

4

5 回答 5

1

使用下面的代码,您可以检查是否$input符合您的要求。
(另见这个简短的演示。)

$input = ...;
$pattern = "~^\s*\d{1,8}(?:\.\d{1,4})?\s*$~";
if (($input > 0) && preg_match($pattern, $input)) {
    /* $input is OK */
} else {
    /* $input is NOT OK */
}

要求:

  • $input有一个长度在 1 到 8 位之间的组成部分。
  • $input可选地包含 a.后跟 1 到 4 位数字(小数部分)。
  • $input是大于或等于 0.0001 的正数。
于 2013-05-12T20:26:08.753 回答
0

您可以使用正则表达式和mb_ereg_match(regex,string)函数

于 2013-05-12T20:00:24.197 回答
0

你可以试试这个:

if (preg_match('~^(?>[1-9]\d{0,7}+|0)(?>\.\d{0,3}+[1,9])?$~', trim($number), $result))
    // true
else
    // false

00015这种模式避免了or之类的东西1.000,但如果你想允许这样做,只需替换[1-9]\d或更好地使用~^\d{1,8}+(?>\.\d{1,4}+)?$~

您必须使用包含经过修剪和验证的数字的 $result 之后工作。

于 2013-05-13T05:01:12.607 回答
0

我认为以下正则表达式将满足您的需求。

它将匹配 99999999.9999 和 00000000.0000 之间的所有数字,带和不带小数点以及空字符串。

分形部分包含不超过 4 个数字

if (preg_match('~^[0..9]{0,8}(?:\.[0..9]{1,4})?$~'), $number) {
  $match = TRUE;
} else{
  $match = FALSE;
}
于 2013-05-12T20:29:26.993 回答
-1

看看这是否有效:

$number = '123.4567';
if(preg_match('/^\s*\d*\.?\d{4}\s*$/', $number)) echo "Match";
else echo "Not match";
于 2013-05-12T20:07:11.627 回答