wpf 文本框的正则表达式

问题描述 投票:0回答:2

有人可以帮我做正则表达式吗?

  • 只有数字(正负)
  • 最多一个点(可选)
  • 最大精度 0.00(可选)
  • 逗号 (,) 应替换为点 (.)

代码如下:

<TextBox PreviewTextInput="NumberValidationTextBox"/>

private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("[^0-9.]+");
            e.Handled = regex.IsMatch(e.Text);
        }

谢谢。

c# regex wpf textbox
2个回答
1
投票
“^-?[0-9]*[\\.,]?[0-9]?[0-9]?$”

这会检测到有效输入,但不会将“,”转换为“.”。只需跟进一个字符串替换来处理它。您将能够安全地假设此时测试中的任何“,”都应该是“.”。


0
投票

问题出在你的方法上:

e.Text 给出输入的字符而不是 TextBox 的内容

所以这个解决方案给出了等待的结果:

    private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex("^-?[0-9]*[\\.,]?[0-9]?[0-9]?$");
        var futureText = $"{(sender as TextBox).Text}{e.Text}";
        e.Handled = !regex.IsMatch(futureText);
    }

要用

,
替换
.
我建议您添加 TextChanged 事件:

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        var myInput = sender as TextBox;

        myInput.Text = myInput.Text.Replace(",", ".").Trim();
        myInput.CaretIndex = myInput.Text.Length;
    }

   <TextBox PreviewTextInput="NumberValidationTextBox" TextChanged="OnTextChanged"/>

我玩属性

CaretIndex
保持光标在最后一个位置(替换重置光标在第一个位置的位置)

我已经将

.trim()
添加到
myInput.Text = myInput.Text.Replace(",", ".").Trim();
因为previewtextInput事件不玩空间(它的正常)

© www.soinside.com 2019 - 2024. All rights reserved.