如何使用正则表达式动态自动格式化2位小数(.00)的数字

时间:2017-08-31 17:10:15

标签: c# regex

我对Regex的要求如下所示美国货币(没有,)。

如果用户在TextBox(HTML)控件中输入金额,则应使用低于预期格式的自动格式化。

如果值为1111 - 则自动格式化为1111.00

如果值为1111.0 - 则自动格式化为1111.00

如果值为1111.00 - 则自动格式化为1111.00

我尝试过如下,但它无效。

   Regex validate = new Regex("([0-9]*)[ (.00)]?");
   if (validate.IsMatch(1111))
   {
     console.writeline(validate.Replace(1111, "$1.00"));
   }

格式: $ 1.00

请提出任何建议

编辑:

在C#中

var p = regionSVG.clone();
d.append(p);

2 个答案:

答案 0 :(得分:0)

我的解决方案一直不是基于正则表达式,但它可行并且可能会给你一些想法

class Program
    {
        static void Main(string[] args)
        {

            var list = new List<string>();
            list.Add("1111");
            list.Add("1111.0");
            list.Add("1111.10");
            foreach (string num in list)
            {

                Regex re = new Regex("([0-9]+)(?:\\.)?(\\d)?(\\d)?");
                Match match = re.Match(num);

                Console.WriteLine();
                if (match.Success)
                {
                    Console.WriteLine(match.Groups[1].Value + "." + match.Groups[2].Value.PadRight(1,'0') + match.Groups[3].Value.PadRight(1, '0'));
                }
            }
            Console.Read();

        }
    }

谈到你的代码,正则表达式可能是这样的:

Regex validate = new Regex("([0-9]+)(?=\\.\\d{0,2})?");
            if (validate.IsMatch("1111"))
            {
                Console.WriteLine(validate.Replace("1111", "$1.00"));
            }

答案 1 :(得分:0)

 var li = new List<string>()
        {
            "1111", "3333.0", "1111.00", "9999.4",
        };

        string MoneyDecimals(string num)
        {
            var rx1 = new Regex(@"\.\d$");
            var rx2 = new Regex(@"^\d+$");

            if (rx1.IsMatch(num))
                return num + "0";
            else if (rx2.IsMatch(num))
                return num + ".00";
            else
                return num;
        }

        foreach (var item in li)
        {
            Console.WriteLine(MoneyDecimals(item));
        }

        //1111.00
        //3333.00
        //1111.00
        //9999.40