用逗号和句点验证正数

时间:2014-06-27 08:10:18

标签: c# asp.net regex validation expression

我需要一个

的正则表达式验证表达式

允许

  • 正数(0-9)
  • ,.

DISALLOW

  • 字母(A-Z)
  • .,
  • 之外的任何其他字母或符号

例如,在我的asp.net文本框中,如果我键入anything@!#--,正则表达式验证将禁止它,如果我键入10.000,5010,000.50它应该被允许。< / p>

我一直试图使用这个正则表达式:

^\d+(\.\d\d)?$

但我的文本框也必须允许,符号,我尝试仅使用整数正则表达式验证,如果我输入字符串,它确实不允许,但它也禁止.,符号应该允许数字(0-9)以及.,符号

5 个答案:

答案 0 :(得分:4)

请勿使用\d[0-9] 中的.NET匹配

首先,在.NET中,\d将匹配任何脚本中的任何数字,例如:

654۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦᠖

所以你真的想要使用[0-9]

不完整的规格

你说你只想允许&#34;数字,逗号和句号&#34;但我不认为这是整个规范。那将是^[0-9,.]+$,那将匹配

...,,,

See demo

调整规格

很难猜出你真正想要允许的内容:10,1,1,1会被接受吗?

我们可以从这样的事情开始,以获得一些结构良好的字符串:

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

使用the demo进行游戏,了解应该和不应该匹配的内容...当您确定最终规范时,我们可以调整正则表达式。

样本匹配:

0
12
12.123
12,12
12,123,123
12,123,123.12456
12.125.457.22

示例不匹配:

12,
123.
1,1,1,1

答案 1 :(得分:2)

你的正则表达式是,

(?:\d|[,\.])+

OR

^(?:\d|[,\.])+$

它匹配一个或多个数字或,.一次或多次。

DEMO

答案 2 :(得分:1)

也许你可以使用这个(以数字开头,以数字结尾):

(\d+[\,\.])*\d+

如果您需要更复杂的价格Regex,您应该使用:

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

编辑:为了使其更可靠(并且不要获得00.50),您可以添加开始和结束符号检查:

(^|\s)(?:(?:[1-9]\d?\d?([ \,\.]?\d{3})*)|0)(?:[\.\,]\d+)($|\s)?

答案 3 :(得分:0)

您的格式有点奇怪,因为它不是标准格式。 我的第一个想法是放置一个浮点而不是一个字符串,并放置一个Range验证属性以避免负数。 但由于格式化,不确定它会起作用。 当然,另一种方式是正则表达式。 你建议的那个意思是: “有些数字可能是一个由一个点和两个数字形成的组”。 这不是你所期待的。

严格适合一个低于100,000.99的数字的例子,一个正则表达式可能是: ^[0-9]{1-2}[\.,][0-9]{3}([\.,][0-9]{1-2})?$ 接受所有正数的更全局的正则表达式是Avinash Raj发布的正则数:(?:\d|[,\.])+

答案 4 :(得分:0)

我认为对你的病情最好的正则表达式是:

^[\d]+(?:,\d+)*(?:\.\d+)?$

这将验证您喜欢的任何内容

同时:

不验证:

  • 以...结尾的数字,
  • 以。结尾的数字。
  • 数字有。在逗号之前
  • 具有多个小数点的数字

在此处查看演示:http://regex101.com/r/zI0mJ4