c# - 正则表达式匹配十进制值

标签 c# regex validation decimal

我有以下正则表达式来匹配小数:

@"[\d]{1,4}([.][\d]{1,2})?"

但我可以输入多个小数点。我怎样才能防止这种情况发生?一般来说,我可以输入像“2000”或“2000.22”这样的字符串。我尝试使用 decimal.TryParse 但我可以输入两个小数点(例如 2000..)

这是我的带有验证方法的类:

 public static class ValidationUtils
 {
    public static bool IsValid(string text)
    {
        var regex = new Regex(@"^\d{1,9}([.]\d{1,2})?$");
        var success = regex.IsMatch(text);

        return success;
    }
 }

这是页面代码开始的调用:

private void OnPreviewTextInput(object sender, TextCompositionEventArgs eventArgs)
{
    var box = eventArgs.OriginalSource as TextBox;
    if (box == null) return;
    eventArgs.Handled = !ValidationUtils.IsValid(box.Text + eventArgs.Text);
}

和TextBox的xaml:

 <TextBox Text="{Binding Nominal, Mode=TwoWay,
 StringFormat={}{0:0.######}, UpdateSourceTrigger=PropertyChanged, 
 NotifyOnValidationError=True, ValidatesOnDataErrors=True,
 Converter={StaticResource  decimalValueConverter}}"
 PreviewTextInput="OnPreviewTextInput"/>

我在这里使用了错误的事件吗?

谢谢。

最佳答案

您需要anchor你的正则表达式。

@"^\d{1,4}([.]\d{1,2})?$"

^ 匹配字符串的开头

$匹配字符串结尾

如果你不这样做,你将得到部分匹配。

关于c# - 正则表达式匹配十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814262/

相关文章:

javascript - 输入类型数字的 ng-pattern

java - 具有渲染属性的 jsf 组件验证失败

ruby-on-rails - ruby rails : Using Parsely-Rails

c# - SmtpClient - 操作超时

c# - 正则表达式 - 匹配相同模式的组

c# - 正则表达式:使用通配符根据用户输入检查 IP 地址

Python正则表达式,匹配多个整数

c# - 从 C# 调用 FORTRAN 子例程

c# - 使用 EMGU CV C# 中的 HOGDescriptor 获取图像的 HOG 描述符

ruby - 为什么我的 map /正则表达式 block 的输出没有大写?