小数に一致する次の正規表現があります。
@"[\d]{1,4}([.][\d]{1,2})?"
しかし、複数の小数点を入力できます。どうすればこれを防ぐことができますか? 通常、「2000」や「2000.22」などの入力文字列を使用できます。decimal.TryParse を使用しようとしましたが、2 つの小数点を入力できます (例: 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"/>
ここで間違ったイベントを使用していますか?
ありがとうございます。