整数的HTML表单的输入类型

Joh*_*ohn 36 html

下面的代码来自HTML表单.如果输入应该是整数,我是否需要更改"类型"?

<div class="friend2title">
    <label for="url">Add points:</label>
</div> 
<div class="friend2field">
    <input name="state" type="text" id="state" maxlength="150">
</div>
Run Code Online (Sandbox Code Playgroud)

小智 36

<input type="number" step="1" ...
Run Code Online (Sandbox Code Playgroud)

通过添加step属性,可以将输入限制为整数.

当然,您也应该始终在服务器上进行验证.除了在严格控制的条件下,从客户收到的所有东西都需要被视为可疑.

  • 这不会阻止您手动输入浮动 (6认同)
  • 必须注意的是,此答​​案仅对HTML5有效 (4认同)
  • 您仍然可以使用此解决方案添加小数位。不酷。 (3认同)
  • @PetrPeller 这可能取决于。来自 [MDN 输入数字](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#Allowing_decimal_values) `允许十进制值数字输入的一个问题是它们的步长是默认为 1 — 如果您尝试输入带有小数的数字,例如“1.0”,它将被视为无效。如果您想输入一个需要小数的值,您需要在步长值中反映这一点(例如 step="0.01" 允许小数点保留两位小数)。这是一个简单的例子:` (2认同)

gco*_*ard 22

如果您使用的是HTML5,则应使用输入类型number.如果您使用的是xhtml或html 4,则输入类型应为text.

  • @John HTML5是一个规范.如果你在所有其他标签之前使用`<!doctype html>`,它会告诉浏览器你正在使用HTML5.如果浏览器不支持HTML5,它将恢复为HTML 4并将其视为"文本",如Neil所说. (3认同)
  • 好的......我怎么知道我是否使用HTML 5? (2认同)
  • @John您可以使用`number`; 它当然会失败HTML 4验证,但HTML 4浏览器会将其视为"text"类型. (2认同)
  • 请注意,类型编号将接受带有"e"或"E"的浮点数,因此您仍需要针对整数进行验证.http://www.w3.org/TR/html-markup/input.number.html (2认同)
  • 这不回答如何请求*整数*的问题 (2认同)

Bre*_*mir 17

这可能有所帮助:

<input type="number" step="1" pattern="\d+" />
Run Code Online (Sandbox Code Playgroud)

step是为了方便(并且可以设置为另一个整数),但pattern做了一些实际的强制执行.

请注意,由于pattern匹配整个表达式,因此没有必要将其表示为^\d+$.

即使有这种向外紧凑的正则表达式,Chrome和Firefox的实现,有趣地允许在e这里(可能用于科学记数法)以及-负数,并且Chrome也允许,.而Firefox在拒绝时更严格,除非.仅仅是0.(Firefox在输入失去焦点时将该字段标记为红色,而Chrome不允许您首先输入不允许的值.)

因为,正如其他人所观察到的那样,应始终在服务器上(或在客户端上验证,如果在客户端本地使用该值或希望阻止用户往服务器的往返).

  • 不阻止输入小数位。12.5 不是整数。 (6认同)

Rus*_*ca8 5

那这个呢:

<input type="number" step="1" onchange="this.value = parseInt(this.value);">
Run Code Online (Sandbox Code Playgroud)

它只是接受你写的任何内容,并尝试从中生成一个整数(如果它不能生成一个整数,它就会将其留空)。

另外,假设您要求输入 0 到 20 之间的数字:

<input type="number" step="1" onchange="this.value = Math.max(0, Math.min(20, parseInt(this.value)));">
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以防止人们在边界之外写入数字(您的标准和不会阻止这种情况)。min=max=