2013-04-23 102 views
0

我有一个州和地方税的输入字段。保留数字和小数的格式,但删除一切

每个字段的数据输入然后我加在一起得到totaltax。

我已经尝试过number_format和round和print_f,但没有一个正在工作,因为我需要它们。我试图找到preg_match的可能性。如果有人进入0.10应该转换为0.10

10.2 
10.33 
10.301 
3.275 
2.90 

我需要的是,输入字段将采取类似的东西。如果它们输入0.10,它应该保持不变。 .125应该输入0.125

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

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

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

谢谢!

回答

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注入。请阅读here。在这种情况下,它不是必需的,因为浮点类型转换确保您的POST值“被转义”。

+0

我会尝试这个,谢谢。我正在逃避,但在例子中,我保持一切都很简单,以获得功能。 :) – John 2013-04-23 23:27:43

+0

这个问题是,我不希望它错误,如果它有一个数字,如10.3%或10.50美元 - 我正在寻找它剥去一切,但留下的数字和小数位置。然后,如果数字以小数开头,则将其添加到零。因此,如果它以.50开头,将其格式设置为0.50--谢谢! – John 2013-04-24 00:07:34

+0

您可以尝试先通过preg_replace运行过滤数据:'$ _POST ['statetax'] = preg_replace('/ [^ 0-9] \ ./','',$ _POST ['statetax']] );'。这剥夺了除数字和“。”之外的所有内容。 – 2013-04-24 00:21:58

1

您应该使用is_numeric()来确保您的输入是一个数字。然后转换为浮点数并返回字符串,以确保0将根据需要进行预编排。这使用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"; 
} 
+0

如果我将10.2的第一个值更改为10.2%或10.2这个错误,那么这不起作用,因为我需要它。我不想让它出错,而是去掉$或%或任何其他不是数字或小数的字符。 – John 2013-04-24 00:08:15

+0

如果输入是“10.2%10.1”会怎么样?使用第一个值? – hek2mgl 2013-04-24 00:09:49

+0

输入不会输入为10.2%10.1。它将以10.2%或$ 10.50输入。但我想要的东西只有坚固的东西才能去掉所有的字符,但只留下数字和点(句点)。 preg_replace(“/ [^ 0-9 \。] /”,“”,$ statetax);我发现这个preg_match是我现在在玩的。 – John 2013-04-24 00:21:06

1

这就是我最终使用。

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

感谢大家的插话。

相关问题