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

本文关键字:检查 正则表达式 文本 | 更新日期: 2023-09-27 18:28:25

我有一个文本框,在其中输入十进制值(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);
}

但我并没有在临时中得到最后插入的字符,因为最后一个字符仍然没有填充在文本框中。

若我在Textchange事件中使用相同的代码,我就无法通过输入值来阻止。我不能使用锥虫,因为我们不能阻止通过它在文本框中输入值。

有什么好的解决方案吗?

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

试试这个

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;
  }
}
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;
}