Regex替换-文本框文本仅包含浮动值

本文关键字:文本 包含浮 替换 Regex | 更新日期: 2023-09-27 18:22:05

修订

我正在尝试制作一个Regex表达式来解析浮点数。

  1. 最多1个负极(-)
  2. 小数点后最多1位(.)
  3. 小数点左边最多3位
  4. 小数点右侧最多3位

我正在尝试以下操作:

Regex regex = new Regex(@"^((['-]?|['.]?|['-'.]?|[0-9]?)([0-9]{0,3}))");
bool isMatch = regex.IsMatch(text);

然而,诸如"--"仍然通过

Regex替换-文本框文本仅包含浮动值

如果必须执行regex:

^-{0,1}''d{0,3}(?:.{0,1}(?<=.)''d{0,3})怎么样?$

这里有一些测试值

关于onchange事件。我不知道你在用什么格式。在MVVM中,绑定将防止框被错误更改。在windows窗体中,您必须自己更改它。我会说,只要对私人财产有利,就要把价值储存起来。THen,如果更改无效,则返回到以前的值。

另外,c#中的测试

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Regex rx = new Regex(@"^-{0,1}'d{0,3}(?:'.{0,1}(?<='.)'d{0,3})?$");
            List<string> testStrings = new List<string>()
            {
                "100",
                "100.100",
                "1000.0000",
                "100000",
                "-1",
                "-1.234",
                "--",
                "100.100ab",
                "1,234.1",
                "1,234",
                "abc",
                "abc123.123",
                "abc.def"
            };
            foreach(var str in testStrings)
            {
                Console.WriteLine(string.Format("{0} = {1}", str, rx.IsMatch(str)));
            }
            Console.ReadLine();
        }
    }
}

如果使用TryParse遵循mbeckish的解决方案,并将其挂接到Validating事件中http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating.aspx,你应该可以走了。

如果你需要使用regex(如果你在每次按键时都这样做的话,你可以使用它),这在过去对我很有效:

^-?''d*''。?(''d+[eE]?[-+]?(''d{1,3})?)?$

对于您的位数要求,您可以将''d*和''d+分别替换为''d{0,3}和'' d{1,3}。

您可以使用Single.TryParse来验证字符串是否是单精度浮点的有效表示形式,而不是正则表达式。