检查文本字段的货币值

时间:2014-12-15 21:01:51

标签: php

我正在寻找一种检查文本字段的方法,以确保只存在数字和小数。文本字段将通过$ _POST [“”]方法提交。

我想确保只提交这些值。

10
20.4
19.99
0.75

我想确保未提交这些值。

10 dollars
20 and .40
Ten Dollars
$10,000.15

我很困惑,我应该用哪些来检查变量值

ctype_digit
is_int
is_numeric

有人可以指出我正确的方向吗?谢谢!

3 个答案:

答案 0 :(得分:1)

if(isset($_POST['field']) && is_numeric($_POST['field']) && $_POST['field'] > 0) { }

让我们打破这一点。

确保$_POST['field']确实存在:

isset($_POST['field'])

存在?好。是numeric吗?

is_numeric($_POST['field'])

是?太棒了。现在它是数字,确保人们输入正值(如果这是你想要的)

$_POST['field'] > 0

(当然,>=,由你决定)

让我们再添加一个步骤,以确保如果它遵循这些规则,它也只是两位小数或更少。

if(strpos($_POST['field'], '.') !== false) {
    $decimals =  explode('.', $_POST['field']);
    if(strlen($decimals[1]) <= 2) {
         //proceed
    } else {
         //should error
} else {
     //proceed
}

答案 1 :(得分:0)

在这里你必须使用is_numeric因为is_intctype_digit不检查浮点数,只检查整数。

正如评论中指出的那样。 is_numeric也接受科学记数法,二进制,八进制和十六进制。

要将其缩小为浮点数,整数和科学记数法,您应该使用is_float,但仍然有科学记数法,那么您可以使用strpos添加一个简单的检查。 最终代码如下所示:

def is_simple_float(x):
    return is_float(x) && strpos(x, 'e') === false

===表示您查找值变量的类型(以确保如果'e'位于0,则不会返回true)。

答案 2 :(得分:0)

我可能会使用RegEx ...

<?php
function clean_decimal($string){
    $string = !empty($string) ? $string : "10 dollars";
    $string = preg_replace("/[^0-9.]/i","",$string);
    return number_format(doubleval($string),2,".",",");;
}