0

我有一个州税和地方税的输入字段。

输入每个字段数据,然后我将两者加在一起以获得总税。

我已经尝试过 number_format 和 round 和 print_f 但它们都没有按照我的需要工作。我试图找到 preg_match 的可能性。

我需要的是,输入字段将采用以下内容:

10.2
10.33
10.301
3.275
2.90

如果有人输入 0.10,它应该转换为 0.10。如果他们输入 0.10,它应该不理会它。.125 相同应输入为 0.125

如果它不是数字或小数,则需要将其删除。

$statetax = $_POST['statetax']; 
$localtax = $_POST['localtax'];
$totaltax = $statetax+$localtax;

insert into tax (state, local, total) values($state, $local, $total)

谢谢!

4

3 回答 3

4

this is what i ended up using.

$statetax = preg_replace("/[^0-9\.]/", "",$_POST['statetax']);
$localtax = preg_replace("/[^0-9\.]/", "",$_POST['localtax']);
$totaltax = ($statetax+$localtax);

thanks everyone for chiming in.

于 2013-04-25T18:01:26.780 回答
1

您应该使用is_numeric()以确保您的输入是一个数字。然后转换为浮点数并转换回字符串,以确保 a0将在需要时添加。这使用floatval()strval()

我希望以下示例对您有所帮助:

$tests = array(
    '10.2',
    '10.33',
    '.301',
    'bar',
    '3.275',
    '2.90',
    '.1',
    'foo'
);

foreach($tests as $input) {
    // check if the value is number using `is_numeric`
    if(!is_numeric($input)) {
        echo "Error: Not a number: $input\n";
        continue;
    }   

    // convert to float and back to string ( in the echo ) will 
    // automatically prepend a 0 if required
    $sanitizedInput = strval(floatval($input));
    echo "Sanitized input: $sanitizedInput\n";
}
于 2013-04-23T23:20:01.893 回答
0

尝试:

$statetax = (float) is_numeric($_POST['statetax']) ? $_POST['statetax'] : 0;
$localtax = (float) is_numeric($_POST['localtax']) ? $_POST['localtax'] : 0;
$totaltax = $statetax + $localtax;

mysql_query(
    "insert into tax ('state', 'local', 'total') values($statetax, $localtax, $totaltax)"
);

一般来说,在构建 SQL 字符串时转义用户输入 ($_POST, ...) 是一个好主意。否则,您将自己设置为 SQL 注入。在这里阅读。在这种情况下,它没有必要,因为浮点类型转换确保您的 POST 值被“转义”。

于 2013-04-23T23:17:44.747 回答