1

私は PHP で作業しており、特定のユーザーが送信した数値入力が大きすぎたり小さすぎたりしないかどうかを確認したいと考えています。

  • 金額を 64 ビット整数としてデータベースに保存しています (将来の計算で丸め誤差を避けるために、10^8 を掛けます)。金額が次の精度を超えないように制限しています: 小数点以下 4 桁まで。また、ユーザー入力の上限は 9900 万であるべきなので、小数点の前の数字を 8 つまでに指定したいと考えています。どうすればこれをきれいに達成できますか?

私の現在のアプローチは少しハックっぽいです:

コード:

//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 より小さくしたくありません。私は Web デザイン用の 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 */
}

要件:

  • $input1 ~ 8 桁の長さの整数部分があります。
  • $inputオプションで、a の.後に 1 ~ 4 桁の数字 (小数部分) が続きます。
  • $input0.0001 以上の正の数です。
于 2013-05-12T20:26:08.753 に答える
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 に答える
0

正規表現とmb_ereg_match(regex,string)関数を使用できます

于 2013-05-12T20:00:24.197 に答える