HTML数字输入框移除了小数点?

6
我在一个表单中的数字输入框遇到了问题。当我输入一个数字,比如 88.2 并提交时,没有问题。但是当另一个人这样做时,如果您从数字输入框中回显变量,可以看到 php 代码已经删除了小数点 (.)。

然而,当他使用逗号时,它不会删除他的小数点,但当我使用逗号时,会删除我的小数点。有没有办法修复这个问题并使其仅接受 "." 作为小数点?

以下是输入框的HTML代码:

<input id="version" name="version" step="0.1" min="1.0" max="250.0" type="number" class="input-small" placeholder="87.2"></input>

PHP代码中没有什么不寻常的地方,只是

echo $_POST['version'];

input-small css:

.input-small {
  width: 90px;
}

我相信 <input type="number"> 只接受整数作为有效值。任何允许小数的情况可能是浏览器错误/未实现的验证。 - James Coyle
2
注意:欧洲人在小数点上使用逗号。你能在某个地方强制设置文化吗? - Steve Wellens
我知道我们使用不同的标记,但是难道没有办法使它不删除点吗?如果另一个人输入88.2,它会显示为882,这真的很烦人。 - user2093673
@SteveWellens 我不知道那可能在哪里,我在Google上只能找到ASP.NET的结果。 - user2093673
@JesperHallenberg - 首先找出/决定它是在浏览器还是服务器上发生的。由于服务器是恒定的,而浏览器和语言环境是不同的,所以很可能是在浏览器中。(或者服务器正在检测浏览器设置并做出反应)。您可以使用Fiddler或一些嗅探工具进行检查。搜索时请使用-asp.net来过滤掉asp.net命中。其他人也有同样的问题:http://www.zen-cart.com/showthread.php?75999-Currency-problem-using-comma-as-decimal-point-%28shop-in-europe%29 - Steve Wellens
2个回答

3

支持 <input type=number> 的功能仍然非常有限、不完整且存在缺陷。

例如,在IE 10和Firefox 19上没有支持。在这些浏览器上,该元素会回退到一个<input type=text>元素,这意味着任何字符串都可以作为输入被接受并传递给服务器,而不进行任何检查。

在支持它的浏览器(如Chrome)上,行为是不同的,并且预计会有所不同,因为HTML5 CR 定义 故意保持开放状态:浏览器需要以某种方式提供数字输入小部件,并保证最终发送到服务器的数据符合元素属性的要求(在给定范围内等)。

实际上,它的实现取决于浏览器的本地语言环境,作为作者无法控制。这意味着浏览器可能接受88.2,也可能接受88,2(并在内部将其转换为88.2),或者同时接受两者,或者原则上只接受象形文字输入(并在内部将其转换为规范形式)。它甚至可以解析用户输入,使得任何额外字符都被丢弃,这意味着当逗号是小数分隔符时,88FOO和88.2可能都被截断为88。
由于浏览器和平台尚未描述,并且不清楚服务器获得了什么,因此很难确定在您的情况下会发生什么。但重要的是,完全不能依赖。它可以在控制环境中使用,在该环境中每个人都使用同一版本的同一浏览器及其操作系统,包括语言版本和区域设置。否则,请使用进行数字输入并在服务器端解析输入,并可选地在客户端预检查它,并确保通知用户输入的预期格式(例如十进制逗号与小数点)。

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接