Regex替换-文本框文本仅包含浮动值
本文关键字:文本 包含浮 替换 Regex | 更新日期: 2023-09-27 18:22:05
修订
我正在尝试制作一个Regex表达式来解析浮点数。
- 最多1个负极(-)
- 小数点后最多1位(.)
- 小数点左边最多3位
- 小数点右侧最多3位
我正在尝试以下操作:
Regex regex = new Regex(@"^((['-]?|['.]?|['-'.]?|[0-9]?)([0-9]{0,3}))");
bool isMatch = regex.IsMatch(text);
然而,诸如"--"仍然通过
如果必须执行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来验证字符串是否是单精度浮点的有效表示形式,而不是正则表达式。