0

我现在正在使用这个正则表达式,

Regex rg = new Regex(@"\d{1,16}\.?|\d{0,16}\.\d{1,3}");

验证输入到文本框中的十进制值。它工作正常。但它允许用户输入十进制值以及非数字字符,如2.aor 2\

我相信错误的部分就在这里\.?。我用过?,所以它接受字母值?我试过类似\.[0-9]?的东西,但它不起作用。

以下是有效值和无效值:

  • 1 --从 0 到 9 有效
  • 11 --有效
  • 11.1 --有效
  • 11.11 --有效
  • 11.1111 -- 有效到小数点后 4 位
  • 1a -- 无效
  • 1\ --无效
  • 1.1a --无效
  • 一个——无效

SO可能有重复的问题。但有效的正则表达式令牌因实现而异。这就是为什么我在这里提出一个新问题。任何帮助都感激不尽!

4

2 回答 2

2

您可以使用该正则表达式:

^\d{1,16}(\.\d{1,4})?$

它将首先验证 1 到 16 位可选点和 1 到 4 位数字。

如果你想总是有点,你应该使用:

^\d{1,16}((\.\d{1,4})|(\.))?$
于 2013-11-01T04:21:21.497 回答
1

正则表达式

^\d{1,16}(\.\d{1,4})?$

工作正常,如果您想识别是否仅在点上可以添加

^(\d{1,16})|(\d{1,16}\.{1}\d{0,4})|(\d{1,16}\.{1})$

它不像另一个优雅,但适用于您发布的场景。

于 2013-11-01T04:43:22.547 回答