在C#中按文本框检查正则表达式

时间:2014-10-29 08:58:54

标签: c# regex

我有一个文本框,我在其中输入十进制值,如十进制(6,3)。 如果条件不匹配,则应限制用户输入值。我正在使用以下代码来检查keypress / keydown事件。

try
{
    string temp = tbweight.Text;
    if (!Regex.IsMatch(temp, @"^\d{1,3}(\.\d{0,3})?$") && !string.IsNullOrEmpty(tbweight.Text))
    {
        e.Handled = true;
    }
}
catch (Exception ex)
{
    MessageBox.Show("Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

但是我没有在temp中插入最后一个字符,因为最后一个字符仍未填入文本框。

如果我在Textchange事件上使用相同的代码,我无法通过输入值来阻止。我也无法使用tryparse,因为我们无法阻止在文本框中输入值。

对此有什么好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

试试这个

private bool dot = false;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
  if (System.Char.IsNumber(e.KeyChar) || e.KeyChar == 8 || e.KeyChar == '.' || e.KeyChar == 13)
  {
    if (e.KeyChar == '.')
    {
      if (!dot)
      {
        dot = true;
        e.Handled = false;
      }
      else
        e.Handled = true;
    }
    else
    {
      e.Handled = false;
    }
  }
  else if (e.KeyChar == ',')
  {
    e.Handled = true;
  }
}

答案 1 :(得分:0)

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    //e.Handled = true;


    e.Handled = Validate(textBox1.Text, e);

}
private static bool Validate(string p, KeyPressEventArgs e)
{
    bool valid = false;

    try
    {


        if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator == e.KeyChar.ToString())
        {
            // e.Handled = true;
            valid = false;
        }
        else
        {
            string t = string.Format("{0}{1}", p, (e.KeyChar));

            if (!(Regex.IsMatch(t, @"^\d{1,3}(\.\d{0,3})?$") && !string.IsNullOrEmpty(t)))
            {
                valid = true;
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    return valid;
}