我有以下正则表达式来匹配小数:
@"[\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"/>
我在这里使用了错误的事件吗?
谢谢。