0

我发现了以下模式:

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

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

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

问题

除了一件事,该模式工作正常。它不能处理负值。如何修改它以接受负值?

结果应该是

  • abc - 错误
  • 123 - 真
  • abc,12 - 假
  • 123,12 - 真
  • -123,12 - 真
  • -123 - 真

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

4

2 回答 2

1

这只是对您的好问题的迟到回答!

您可以考虑给出一个带有开始左边界的字符列表,^然后根据需要从右侧放松它,然后从左向右滑动这些字符,这可能会传递任何类型的正数和负数,包括浮动,数字右侧也有任何内容。你可以用它关闭它,$它只允许数字。

可能类似于

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

在此处输入图像描述

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

如果您希望验证数字,那么您可能希望为此类实例添加更多边界:

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

图形

此图显示了表达式的工作原理,您可以在此链接中可视化您的表达式:

在此处输入图像描述

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.  ");

于 2019-05-08T03:05:22.507 回答
0

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

于 2014-08-15T00:31:26.093 回答