use*_*103 4 c# regex validation textbox winforms
我想创建一个TextChanged事件来检查输入文本是否符合特定条件,如果没有,则删除输入的最后一个字符.在这种情况下,标准是数字,1个小数和1个分数.
我正在测试正则表达式只是为了数字和小数,并遇到了一个问题.我已经尝试了几种不同的表达方式(我写自己很糟糕,因此它们可以从各种其他堆栈溢出问题中获取),结果每次都是相同的.它接受数字就好了,但它不接受小数.任何帮助将不胜感激!
string isNumber = @"^\d{1,9}(\.\d{1,9})?$";
private void TextBox_TextChanged(object sender, EventArgs e)
{
TextBox text = (TextBox)sender;
Match match = Regex.Match(text.Text, isNumber);
if (!match.Success)
{
if (text.Text.Length > 1)
text.Text = text.Text.Substring(0, text.Text.Length - 1);
else
text.Text = "";
text.Select(text.Text.Length, 0); //set cursor to the end
//of the string
}
}
Run Code Online (Sandbox Code Playgroud)
我认为问题在于您尝试逐个字符地验证用户类型的数字,但是如果临时值不是无效值,则无法键入有效的十进制数.
考虑用户键入值时会发生什么1.2:
1. 1 是有效的小数,因此验证通过..1. 根据正则表达式,它不是有效的小数,因此最后一个字符将被删除.1.如您所见,无法输入小数点.但是,如果您尝试更改正则表达式以允许小数点存在而没有后续数字,那么如果用户在键入小数点后停止然后提交表单,则可能会出现无效值.
所以重点是,使用逐个字符的验证方案将不适用于小数.更好的方法是允许用户在框中输入他们想要的内容,然后在用户完成输入后进行验证.您可以通过验证文本框何时失去焦点或何时提交表单来执行此操作.
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |