使用正则表达式验证数字

时间:2014-05-07 08:23:31

标签: c# regex wpf validation input

我有一个WPF表单,用户可以输入宽度和高度来缩放图像。我想用正则表达式验证数字。用户应该只能输入大于零的数字。

目前我使用的是PreviewTextInput事件

<TextBox Name="Height" Width="50" PreviewTextInput="Height_ValidateNumber"></TextBox>

并使用此方法检查输入

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

我使用的正则表达式是^[1-9][0-9]\*$

问题在于我能够输入除零之外的所有数字......

如果我使用[^1-9][0-9]\*$,我可以输入除零之外的所有数字...

我认为正则表达式^[1-9][0-9]\*$没错。我认为这是另一个问题。

2 个答案:

答案 0 :(得分:2)

您正在过滤所有有效值而非无效

更改此

e.Handled = regex.IsMatch(e.Text);

e.Handled = !regex.IsMatch(e.Text);

Update1:​​e.Text提供新输入的文字,您可以将TextBox.Texte.Text连接起来构建全文。

TextBox tb = (TextBox) sender;
Regex regex = new Regex("^[1-9][0-9]*$");
e.Handled = !regex.IsMatch(tb.Text + e.Text);

答案 1 :(得分:1)

我知道您要求使用RegEx,但为什么不使用:

long number;
if (UInt32.TryParse(e.Text, out number)) 
    // You can use ANY .net Number class here 
    //(you want > 0, use the UInt16,UInt32,UInt64 Structs)

对我来说似乎更容易也更符合逻辑:)