【问题标题】:Validating Positive number with comma and period用逗号和句点验证正数
【发布时间】:2014-06-27 08:10:17
【问题描述】:

我需要一个正则表达式验证表达式,它将

允许

  • 正数(0-9)
  • ,.

禁止

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

例如,在我的 asp.net 文本框中,如果我输入 anything@!#--,正则表达式验证将不允许它,如果我输入 10.000,5010,000.50 它应该允许。

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

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

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

【问题讨论】:

标签: c# asp.net regex validation expression


【解决方案1】:

不要使用\d 匹配.NET 中的[0-9]

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

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

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

规格不完整

您说您只想允许“数字、逗号和句点”,但我认为这不是全部规范。那将是^[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

【讨论】:

  • 哈,我想我会是第一个指出 ^[0-9,.]+$ 事情的人哈哈
  • @Jerry 不,我的朋友,当我回答这个问题并看到 4 个答案时,我感到非常惊讶! :)
【解决方案2】:

你的正则表达式是,

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

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

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

DEMO

【讨论】:

  • 匹配54۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦
【解决方案3】:

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

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

如果您需要更复杂的价格正则表达式,您应该使用:

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

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

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

【讨论】:

  • 匹配54۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦
【解决方案4】:

我认为最适合您情况的正则表达式将是:

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

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

同时:

不验证:

  • 以 , 结尾的数字
  • 以 . 结尾的数字
  • 具有 .逗号前
  • 小数点多于一位的数字

在这里查看演示:http://regex101.com/r/zI0mJ4

【讨论】:

  • 匹配54۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦
【解决方案5】:

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

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

【讨论】:

  • 哪一个?我在我的第一个正则表达式中用 [0-9] 替换了 \d 快捷方式。应该没问题。
  • 很高兴您解决了54۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦ 问题。 :) 但是您的^[0-9]{1-2}[\.,] 等中仍然存在严重的问题,如果您对其进行测试,您会发现。 :)
猜你喜欢
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
相关资源
最近更新 更多