我有一个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]\*$
没错。我认为这是另一个问题。
答案 0 :(得分:2)
您正在过滤所有有效值而非无效
更改此
e.Handled = regex.IsMatch(e.Text);
到
e.Handled = !regex.IsMatch(e.Text);
Update1:e.Text
提供新输入的文字,您可以将TextBox.Text
与e.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)
对我来说似乎更容易也更符合逻辑:)