正则表达式允许使用逗号和正确的验证编号

时间:2017-08-07 15:16:17

标签: c# regex

很难让我的正则表达式正常工作。基本上,我只需要一个有效的数字正则表达式,只允许一个逗号。以下是我的尝试:

[0-9]*[,]\\d

(当我以为我可能有一个带有多个逗号的数字时,不再是这种情况了)

[0-9][,]\\d

^\d+(?:[\,]\d+)?$http://regexr.com/3ggn5

后者似乎效果最好,但是当我输入时:1,23134它并没有违反规则。如何更好地确保输入无效的数字1,23232(例如)它会中断,但如果你1,232(例如,只显示有效的数字输入)就没问题

更新

这是围绕的代码,只使用RegularExpression批注:

[RegularExpression(@"^\d+(?:[\,]\d+)?$", ErrorMessage = ...]

更新2

有效数字我只是指一个格式正确符合美国标准的数字。有效数字的示例:

  • 1
  • 10
  • 100
  • 1,000
  • 1000
  • 10,000
  • 10000
  • 100000
  • 100000 ..等

在美国,我们要么有逗号,要么不要在第三个数字之后(在某些情况下,第一个数字除外,1,000有效)。虽然,如果你有逗号,你通常会使用逗号每隔三位数。所以我假设一个这样的数字:1,00000000 isn' t valid

无效数字的示例:

  • 1,1
  • 1.00
  • 12,12

基本上,如果世界上任何其他地方在第三个数字之后的地方使用逗号,这对我需要的内容无效。只是可能有或没有逗号的数字。

1 个答案:

答案 0 :(得分:2)

This Regex将解析许多有效格式的数字:

^-?(\d+|\d{1,3}(?:,\d{3})+)?(\.\d+)?$
  • 逗号后会检测到太多数字
  • 错误的点符号
  • 无逗号的数字将通过

如果您不需要也不需要负数或浮点数,您可以简化它:

^(?:\d+|\d{1,3}(?:,\d{3})+)$

如果你不想要逗号的数字(例如:1345):

^\d{1,3}(?:,\d{3})+$

P.S:对于来自非英语国家的用户,您可以在所有正则表达式中用空格替换逗号,它将以相同的方式工作