Php 保留数字和小数的格式,但删除所有其他内容

Php 保留数字和小数的格式,但删除所有其他内容,php,numbers,preg-match,Php,Numbers,Preg Match,我有州和地方税的输入字段 输入每个字段数据后,我将两者相加,得到totaltax 我试过数字格式和圆形打印,但没有一个能像我需要的那样工作。我想找到一个预赛的可能性 我需要的是,输入字段将包含以下内容: 10.2 10.33 10.301 3.275 2.90 如果有人输入.10,则应转换为0.10。如果输入0.10,则应将其忽略。与.125相同,应输入为0.125 如果不是数字或小数,则需要将其删除 $statetax = $_POST['statetax']; $localtax = $

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

输入每个字段数据后,我将两者相加,得到totaltax

我试过数字格式和圆形打印,但没有一个能像我需要的那样工作。我想找到一个预赛的可能性

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

10.2
10.33
10.301
3.275
2.90
如果有人输入.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)
谢谢

试试看:

$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字符串时,最好转义用户输入($\u POST,…)。否则,您将自己设置为SQL注入。读一读。在这种情况下,它不是必需的,因为float类型转换确保您的POST值是“转义的”。

尝试:

$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字符串时,最好转义用户输入($\u POST,…)。否则,您将自己设置为SQL注入。读一读。在这种情况下,它不是必需的,因为float类型转换确保您的POST值是“转义的”。

您应该使用它来确保您的输入是一个数字。然后将其转换为浮点数并返回到字符串,以确保在需要时将预先显示
0
。这使用和

我希望下面的例子能有所帮助:

$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";
}
您应该使用以确保您的输入是一个数字。然后将其转换为浮点数并返回到字符串,以确保在需要时将预先显示
0
。这使用和

我希望下面的例子能有所帮助:

$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";
}

这就是我最后使用的

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

谢谢大家的参与。

这就是我最后使用的

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

谢谢大家的来电。

我会试试这个,谢谢。我正在转义,但在示例中,为了获得函数,我保持了一切的简单性。:)问题是,如果它有一个数字,比如10.3%或10.50美元,我不希望它出错——我希望它能去掉所有东西,但保留数字和小数。然后,如果数字以小数点开头,则添加一个零。因此,如果它以.50开头,请将其格式化为0.50-谢谢!您可以先通过preg\u replace运行post数据来尝试筛选它:
$\u post['statetax']=preg\u replace('/[^0-9]\./','',$\u post['statetax'])。除了数字和“.”之外,这条带什么都没有。我会试试这个,谢谢。我正在转义,但在示例中,为了获得函数,我保持了一切的简单性。:)问题是,如果它有一个数字,比如10.3%或10.50美元,我不希望它出错——我希望它能去掉所有东西,但保留数字和小数。然后,如果数字以小数点开头,则添加一个零。因此,如果它以.50开头,请将其格式化为0.50-谢谢!您可以先通过preg\u replace运行post数据来尝试筛选它:
$\u post['statetax']=preg\u replace('/[^0-9]\./','',$\u post['statetax'])。除了数字和“.”之外,这一切都被去除了。如果我将第一个值10.2更改为10.2%或$10.2,它就不会像我需要的那样工作。我不想让它出错,而是去掉$或%或任何其他不是数字或小数的字符。如果输入是
10.2%10.1
?使用第一个值?输入值不会作为10.2%10.1输入。它将被输入为10.2%或10.50美元。但我想有一个坚如磐石的东西,可以去掉所有的字符,但不留下数字和点(句号)。我找到了我现在正在玩的preg_匹配:preg_replace(“/[^0-9\.]/”,“,$statetax)<代码>输入将不会作为10.2%10.1输入。
。。如果输入来自web,则不能这样说。请注意,输入可以是所有内容。拥有这个字符串,您的正则表达式将失败。我也在准备一些怀孕相关的东西。如果readyThis没有按我需要的那样工作,如果我将第一个值10.2更改为10.2%或$10.2 it错误,则将发布。我不想让它出错,而是去掉$或%或任何其他不是数字或小数的字符。如果输入是
10.2%10.1
?使用第一个值?输入值不会作为10.2%10.1输入。它将被输入为10.2%或10.50美元。但我想有一个坚如磐石的东西,可以去掉所有的字符,但不留下数字和点(句号)。我找到了我现在正在玩的preg_匹配:preg_replace(“/[^0-9\.]/”,“,$statetax)<代码>输入将不会作为10.2%10.1输入。
。。如果输入来自web,则不能这样说。请注意,输入可以是所有内容。拥有这个字符串,您的正则表达式将失败。我也在准备一些怀孕相关的东西。如果已准备就绪,则将发布该期间的转义字符是不必要的。这可以简化为
$statetax=preg\u replace(“/[^0-9.]/”,“,$”POST['statetax]”)不需要句点的转义字符。这可以简化为
$statetax=preg\u replace(“/[^0-9.]/”,“,$”POST['statetax]”)