使用正则表达式匹配带或不带千位分隔符的数字值

7

我需要一个正则表达式来匹配以下内容:

1.234.567
-1.234.789
1234567
-1234567

它不应该匹配:

.123     (leading separator)
123..456 (two separators)

换句话说,我需要一个正则表达式来匹配带有或不带千分位分隔符的“long”数值格式。谢谢!

1
千位分隔符总是点吗? - Chandu
听起来有点像作业。 - Jim Deville
不是作业。我正在尝试从 WPF 的 TextBox 中忽略无效的用户输入。 - Olav Haugen
2个回答

9

以下是更为严格的答案:

^-?(?!0)(?:\d+|\d{1,3}(?:\.\d{3})+)$

在线查看请点击此处

(?!0) 用于防止以0开头。

\d+可以匹配没有分隔符的数字。

\d{1,3}(?:.\d{3})+是分隔符的部分。首先有1到3个数字,然后是分隔符和3个数字。分隔符为点号,后面跟着3个数字,这部分可以重复出现。


谢谢!+1 鉴于你提供了更详细的说明。 - Olav Haugen

2
你可以这样做:

您可以像这样做:

^-?([0-9]{1,3}\.?)+$

RegExr演示


谢谢!并且+1为链接到带有示例的演示。 - Olav Haugen
@Olav @bazmegakapa 你们知道这也匹配 0.0.01.23.451. 吗? - stema
@stema 我同意。对于客户端验证来说,这已经足够了。当然你的方法更好,但对我来说有点过度设计了。 - kapa
选择了 @stema 的答案,因为它更全面地涵盖了我所寻找的内容。 - Olav Haugen

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