【问题标题】:Regex for decimal number validation in C#C# 中十进制数验证的正则表达式
【发布时间】:2015-11-26 13:18:21
【问题描述】:

我需要允许正数和负数范围小数的正则表达式

喜欢.89-10000.000300、.....

我的正则表达式是^\d*\.?\d*

问题是,当您输入特殊字符(如 $!*)时,它会接受这些字符。

【问题讨论】:

  • 那么使用float.TryParse有什么问题?

标签: c# regex c#-4.0


【解决方案1】:

如果您热衷于使用regex,可以使用以下方法:

^-?[0-9]*\.?[0-9]+$

See live demo

【讨论】:

    【解决方案2】:

    我将使用decimal.ParseAllowDecimalPoint and AllowLeadingSign styles 以及将. 作为NumberDecimalSeparator 的文化(如InvariantCulture)解析它,而不是正则表达式。

    var d = decimal.Parse("-.89", 
                          NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, 
                          CultureInfo.InvariantCulture);
    

    这涵盖了您提到的所有需求。

    【讨论】:

      【解决方案3】:

      你错过了一个反斜杠!单个点在 Regex 表达式中具有不同的含义。

      public static bool IsValidDecimal()
      {
          string input = "132456789"
          Match m = Regex.Match(input, @"^-?\d*\.?\d+");
          return m.Success && m.Value != "";
      }
      

      【讨论】:

      • 对于负数会失败,对于带有小数但没有小数部分的数字(如1.
      • 即使这个也可以正常工作。谢谢@Jules。我错过了 m.value!=""。
      • 我确信这个正则表达式接受1.,这不是一个格式正确的数字!
      猜你喜欢
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2016-07-02
      • 2018-03-02
      • 2014-07-02
      相关资源
      最近更新 更多