在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事件中使用相同的代码,我就无法通过输入值来阻止。我不能使用锥虫,因为我们不能阻止通过它在文本框中输入值。
有什么好的解决方案吗?
试试这个
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;
}