【问题标题】:C#: Min to max number of digits after a decimalC#:小数点后的最小到最大位数
【发布时间】:2014-01-30 14:25:50
【问题描述】:

我正在尝试检查用户输入的费率,如果输入的值在小数点后最少 2 位到最多 5 位,我想接受。

有效示例:

*1.12
*1.123
*1.1234
*1.12345

无效:

1
1.1
1.123456

等等

我一直在尝试使用 Regex 来获取它,但现在它只允许小数点后 5 位数字,仅此而已。代码如下:

//Check if the string is a double 
bool IsDouble(string s)
{
    var regex = new Regex(@"^\d+\.\d{5}?$");
    var check = regex.IsMatch(s);
    return check;  
}

我们将不胜感激。

【问题讨论】:

    标签: c# regex validation


    【解决方案1】:

    应该这样做:

    ^\d+\.\d{2,5}$
    

    【讨论】:

      【解决方案2】:

      使用模式

      "^\d+\.\d{2,5}?$"
      

      匹配 2 到 5 个字符

      【讨论】:

      • 谢谢!像魅力一样工作
      【解决方案3】:

      试试这个正则表达式

      您可以在此处指定自己的范围 d{2,5}

      ^\s*-?[1-9]\d*(\.\d{2,5})?\s*$
      

      (或)

      ^(\d{1,5}|\d{0,5}\.\d{2,5})$
      

      REGEX DEMO

      【讨论】:

        【解决方案4】:

        非正则表达式解决方案
        它还返回小数

        public int? DecimalAfter (string strDec, out decimal? decNull)
        {
            int? decAfter = null;
            strDec = strDec.Trim();
            decimal dec;
            if (decimal.TryParse(strDec, out dec))
            {
                decNull = dec;
                int decPos = strDec.IndexOf('.');
                if (decPos == -1)
                {
                    decAfter = 0;
                }
                else
                {
                    decAfter = strDec.Length - decPos - 1;
                }
            }
            else decNull = null;
        
            return decAfter;
        }
        

        【讨论】:

          猜你喜欢
          • 2014-06-10
          • 1970-01-01
          • 2017-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多