0

我正在尝试编写正则表达式,以便它对以下所有可能性返回 true

1.2E3
12.22e32
+1.2
1,222
3,222
+3,222E23
3.2E2,333

如果逗号后有 3 位数字,则逗号有效。我有返回的正则表达式可能适用于 E/e 和小数点

[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?

我也有下面的正则表达式,它适用于逗号。

^(\d?\d?\d(,\d\d\d)*|\d+)(\.\d\d)?$

上面 regex 的第一件事,我不明白它是如何工作的。我知道 ^ 用于否定表达式。我理解其余部分,但为什么它必须否定它?

我已经尝试将两者结合起来完成我的工作。这是我的尝试(它们不适用于逗号)

"[-+]?[0-9]*(,[0-9][0-9][0-9])*\\.?[0-9]+([eE][-+]?[0-9]+)?"

"/[1-9](?:\\d{0,2})(?:,\\d{3})*(?:\\.\\d*[1-9]+([eE][-+]?[0-9]+)?)?|0?\\.\\d*[1-9]+([eE][-+]?[0-9]+)?|0/"

有人可以帮我解决这个问题。这似乎让我头疼

4

2 回答 2

1

我假设您不允许没有逗号的数字。除非写为 123,456,否则 123456 是无效的。鉴于该假设,此正则表达式将起作用:

^[+-]?\d{1,3}((\.\d{1,3})?|(,\d{3})*)([eE]\d{1,3}(,\d{3})*)?$

您可以在debuggex上查看它如何工作的详细信息。

于 2013-04-08T18:36:41.933 回答
1

这有效:

/^[+-]?[\d]{1,3}((\.[\d]{1,3})?|(,[\d]{3})*)([eE][\d]{1,3}(,[\d]{3})*)?$/

请注意,这将有更优雅的正则表达式。

干杯。

于 2013-04-08T10:30:57.437 回答