具有负值的HTML5输入模式小数

时间:2013-10-25 12:43:32

标签: regex html5 forms input

我找到了以下模式:

\d+(,\d{2})?
  • 这是一个可以在HTML5表单中使用的正则表达式。
  • 验证字段使用逗号和两位小数。

可以在这样的文本框中使用:

<input type="text" pattern="\d+(,\d{2})?" required>

问题

除了一件事以外,这种模式很好。它无法处理负值。如何修改它以接受负值?

结果应为

  • abc - false
  • 123 - true
  • abc,12 - false
  • 123,12 - true
  • -123,12 - true
  • -123 - true

最后两个不适用于当前模式。

2 个答案:

答案 0 :(得分:1)

您可以在模式的开头添加^[+-]?。 所以它会是这样的:pattern="^[+-]?\d+(,\d{2})?"

答案 1 :(得分:1)

这只是对您的好问题的最新答案!

您可能已经考虑过给出一个以左边界开始为 ^ 的字符列表,然后根据需要从右侧放宽它,然后从左向右滑动这些字符可能传递了包括浮点数在内的任何类型的正数和负数,并且数字的右边也包含任何内容。您可以使用 $ 将其关闭,这将只允许数字。

也许是表达式similar to

^([-+,0-9.]+) 

enter image description here

此表达式将覆盖您的示例输入,但不适用于验证数字。

如果您希望验证数字,则需要为此类实例添加更多边界:

+-123
+-,123,12
0.000.000.1
-000,000.0001
+000,000,000,000.1

此图显示了表达式的工作方式,您可以在以下link中可视化表达式:

enter image description here

repeat = 1000000;
start = Date.now();

for (var i = repeat; i >= 0; i--) {
	var string = '-123,000,000.19 with anything else that you wish';
	var regex = /^([-+,0-9.]+)(.*)/g;
	var match = string.replace(regex, "$1");
}

end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match  ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test.  ");