【问题标题】:Regular expression for 3 decimal point3 个小数点的正则表达式
【发布时间】:2012-10-03 04:43:53
【问题描述】:

我需要一个满足这些规则的正则表达式:

  1. 小数点的最大位数为 3,但也应接受没有小数点的数字(例如 12)
  2. 该值必须至少为 0
  3. 该值必须小于或等于 99999999999.999
  4. 小数点是 DOT(例如 2.5,而不是 2,5)

有效数字示例:

0
2
0.4
78784764.23
45.232

无效数字示例:

-2
123456789522144
84.2564

我在这里找到了一个示例 (http://forums.asp.net/t/1642501.aspx) 并设法对其进行了一些修改以使最小值为 0,最大值为 99999999999.999 并接受仅 DOT 作为小数点。这是我修改后的正则表达式:

^\-?(([0-9]\d?|0\d{1,2})((\.)\d{0,2})?|99999999999.999((\.)0{1,2})?)$

但是,我仍然对小数点后 3 位有疑问,而且它相当不稳定。任何人都可以帮助我,因为我在正则表达式方面基本上是文盲?

谢谢。

已编辑: 我正在使用 ASP 正则表达式验证器

【问题讨论】:

  • 如果最小值为 0,为什么允许使用减号?
  • 我不打算允许减号,但由于用户将在文本框中输入输入,因此用户可能会尝试输入负值(以及非数字值)。

标签: asp.net regex


【解决方案1】:

这并不难:

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

说明:

^            # Start of string
[0-9]{1,11}  # Match 1-11 digits (i. e. 0-99999999999)
(?:          # Try to match...
 \.          # a decimal point
 [0-9]{1,3}  # followed by one to three digits (i. e. 0-999)
)?           # ...optionally
$            # End of string

【讨论】:

  • 感谢您的回复。我很抱歉,但它似乎不起作用。我用这个值 54.866 进行了测试,但验证失败。当值为 100 或更大时,它也会失败。它适用于以下值:58、1.2、1.23 虽然
  • 这里的正则表达式absolutely works54.866
  • @ixora:Tim 的正则表达式完美运行。这是您问题中的正则表达式以您描述的方式失败。顺便说一句,您改编的正则表达式如此复杂的原因是因为原始版本不允许前导零,并且它确实允许减号(两者都不是规定的要求)并且它必须匹配 @ 987654325@ 或 200.00 但不是 200.01200.99。你的情况要简单得多。
  • 今天早上我再次使用 Tim 的正则表达式进行了测试,它可以正常工作。我不知道为什么我昨天测试它时它不起作用,而且我之间没有做任何改变。话虽如此,给您带来的不便深表歉意,并感谢大家对我的帮助。
  • 很好,但不处理以0开头但不跟01.2这样的小数点的数字
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多