【问题标题】:Validating 'Price' (double) form input PHP [duplicate]验证“价格”(双)表单输入PHP [重复]
【发布时间】:2015-11-27 18:26:27
【问题描述】:

您好,我正在尝试使用 PHP 在表单上验证用户输入。 我已设法验证文本、数字和年份输入,但无法让价格起作用。

我在代码顶部创建错误变量:

 $titleErr = ""; $developerErr = ""; $releaseErr = ""; $stockErr = ""; $priceErr = "";

然后我验证输入并在需要时将消息分配给变量:

if (!preg_match("/^[a-zA-Z ]*$/",$title)) {
                    $titleErr = "Invalid input, only letters and white space allowed.";
                } else if (!preg_match("/^[a-zA-Z ]*$/",$developer)){
                    $developerErr = "Invalid input, only letters and white space allowed.";
                } else if ($release<1990 || $release>2020){
                    $releaseErr = "Invalid input, enter a year between 1990 & 2020.";
                } else if (!is_numeric($stock)){
                    $stockErr = "Invalid input, only numbers allowed.";
                } else if (!is_float($price)){
                    $priceErr = "Invalid input, only doubles allowed.";
                }

前 4 个语句完美地验证了输入。但是,当我输入正确的输入时,最后一个检查输入是否为浮点数(例如 10.99 的价格)似乎返回了错误消息。

这是我的表格:

<form class ="form-horizontal" role="form" id="add" name="add" action="?" method="post">           
            <div class="form-group">
                <label class="control-label col-sm-2">Title</label> <div class="col-sm-10"><input class="form-control" id="addFormTitle" name="title" type="text"> <span class="error"><?php echo $titleErr;?></span></div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Developer</label> <div class="col-sm-10"><input class="form-control" id="addFormDeveloper" name="developer" type="text"> <span class="error"><?php echo $developerErr;?></span></div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Release (Year Format/YYYY)</label> <div class="col-sm-10"><input class="form-control" id="addFormRelease" name="release" type="text"> <span class="error"><?php echo $releaseErr;?></span></div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Stock</label> <div class="col-sm-10"><input class="form-control" id="addFormStock" name="stock" type="text"> <span class="error"><?php echo $stockErr;?></span></div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Price (&#163)</label> <div class="col-sm-10"><input class="form-control" id="addFormPrice" name="price" type="text"> <span class="error"><?php echo $priceErr;?></span></div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <button type="submit" class="btn btn-default" name="addSubmit" value="Add product">Submit</button>
                </div>
            </div>
        </form>

【问题讨论】:

  • 当您的浏览器向 PHP 发送值(例如使用 GET 或 POST)时,everything 被 PHP 解释为字符串。即使值是1,这实际上是"1"。因此使用is_float() 总是错误的。
  • 查看validating price的正则表达式

标签: javascript php jquery forms validation


【解决方案1】:

你可以使用floatval函数来获取一个变量的浮点值,然后检查它是否是一个浮点值,像这样:

if(is_float(floatval($price))){
    echo "float value";
}else{
    echo "not a float value";
}

已编辑:

在您的代码中,您可以执行以下操作:

if (!preg_match("/^[a-zA-Z ]*$/",$title)) {
    $titleErr = "Invalid input, only letters and white space allowed.";
} else if (!preg_match("/^[a-zA-Z ]*$/",$developer)){
    $developerErr = "Invalid input, only letters and white space allowed.";
} else if ($release<1990 || $release>2020){
    $releaseErr = "Invalid input, enter a year between 1990 & 2020.";
} else if (!is_numeric($stock)){
    $stockErr = "Invalid input, only numbers allowed.";
} else if (!is_float(floatval($price))){
    $priceErr = "Invalid input, only doubles allowed.";
}

【讨论】:

  • 好主意,但是这行不通,因为floatval('string') 被转换为float(0)。因此,您无法判断该值是实际上 0 还是只是输入错误。 is_float(floatval( $any_string )) 始终是 true
  • 啊,不错。它不会捕获 0 作为浮点数。
  • @user2966455 请参阅我上面的评论。尝试输入一个无效值,我保证它不会捕获它。
  • @Mike 是的,你是对的,我该如何纠正这个问题?
  • @user2966455,迈克是对的。我想你的answer lies here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多