【问题标题】:php accept 0.01 as inputphp 接受 0.01 作为输入
【发布时间】:2015-06-06 21:22:01
【问题描述】:

我有一个 HTML 表单:

<input type="number" step="any" name="nearkm" value="000.000" onfocus="if(this.value == '000.000') { this.value = ''; }"></>

输入可以从 000.001 到 999.999

验证输入正确的search.php代码如下:

if (!isset($_GET["nearkm"]) || empty($_GET["nearkm"]) || (int) $_GET["nearkm"] == null)

该代码适用于包括 1 及以上的输入,但是,如果我输入 0.01 或任何小于 1 的值,则 if 条件失败。

我的问题是有没有更好的方法来检查输入,例如,使用正则表达式或其他函数?

【问题讨论】:

  • (int)0.01 == 0 == null
  • $_GET["nearkm"] 返回一个字符串。如果您需要检查它是否是数字,请尝试使用PHP函数is_numeric()php.net/manual/en/function.is-numeric.php如果需要,还有is_nullis_float

标签: php regex validation int


【解决方案1】:

首先,您应该使用 PHP 提供的 intval() 函数将字符串安全地转换为整数。

其次,如果你想要像 0.01 或 0.999 这样的数字,你需要一个 float,整数没有小数,所以你应该实际上使用floatval()

您遇到的问题是,当 0.01 被转换为整数时,它被舍入(到 0),大致等于 null,您需要使用 floatval() 并使用 @ 进行精确比较987654325@ 像这样:floatval($_GET["nearkm"]) === 0.

【讨论】:

  • 更准确地说:转换为 int 的浮点值不会被四舍五入,但小数位会被截掉。
猜你喜欢
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2019-07-14
  • 2011-03-09
相关资源
最近更新 更多