【问题标题】:TextBox validating, integer with symbol文本框验证,带符号的整数
【发布时间】:2015-09-07 20:17:12
【问题描述】:

我想限制用户只能在文本框中键入整数(不是双精度)和符号 ","。我试过这段代码,但是当我尝试删除错误的输入时,它总是弹出消息框。

if (!System.Text.RegularExpressions.Regex.IsMatch(textBox4.Text, @"^[0-9,-Key.Back]"))
{
    MessageBox.Show("This textbox accepts only alphabetical characters");
    //textBox4.Text.Remove(textBox4.Text.Length - 1);
    //textBox4.Clear();
}

请帮忙。

【问题讨论】:

  • 您不能在正则表达式模式中使用Key.Back。在 KeyDown/KeyPress 事件处理程序中处理此键(请参阅here)。

标签: c# regex validation textbox


【解决方案1】:

我猜你正在TextChanged 事件处理程序中运行代码。问题出在您的正则表达式上。您说您需要允许数字和逗号,但您正在检查是否有数字 ,,K 之间的某个范围以及一些带有文字的字母(ey 等)点在字符串的开头

我想你想像这样修复它

if (!System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, @"^[0-9,]*$"))
{
    MessageBox.Show("Please enter only numbers and commas.");
}

当整个输入包含从头到尾的数字和逗号时,^[0-9,]*$ 正则表达式返回 true。

如果您只需要使用, 作为小数分隔符的整数,请使用

^\d+(?:,\d+)?$

如果您想允许以, 作为数字分组(千位分隔符)符号的整数,请使用

^\d{1,3}(?:,\d{3})*$

要处理 Key.Back 键,您需要在 KeyDown/KeyPress 事件处理程序中实现所需的行为,请参阅 How can I determine if the Backspace has been pressed in the KeyPress event?

【讨论】:

    【解决方案2】:

    试试这个:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit(e.KeyChar) && e.KeyChar != ',' && e.KeyChar != (char)Keys.Back)
        {
            e.Handled = true;
            MessageBox.Show("Digits, commas and backspace only");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 2013-06-07
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多