繁体   English   中英

正则表达式为两个字符

[英]Regex for two characters

如何构造一个正则Regex以允许输入CACH 尝试过\\bC(A|H)C(A|H)但是我需要像这样在textboxKeyPress事件中对其进行验证;

private Regex _regex = new Regex(@"C(A|H)");

private void txtCaCh_KeyPress(object sender, KeyPressEventArgs e)
{
    if (char.IsControl(e.KeyChar))
        return;

    if (!_rolfRegex.IsMatch(e.KeyChar.ToString().ToUpper()))
        e.Handled = true;
}

您可以使用

if (e.KeyChar != (char)8)  // Not a backspace key
   if (!Regex.IsMatch(txtCaCh.Text.ToUpper() + e.KeyChar.ToString().ToUpper(), @"^C[AH]?$"))  // If the value is not CH or CA
       e.Handled = true;   // Do not let it pass

KeyPress事件处理程序内部, txtCaCh.Text包含添加下一个键之前的值。 因此,要获取完整值,我们需要添加新按下的键值。 之后,我们可以检查该值是否是我们可以接受的值。

^C[AH]?$

此正则表达式接受CCACH值,以便我们可以输入它们。

然后,您需要使用^C[AH]$ (例如, Leave事件)在其他事件中对其进行验证。

实时验证不能与最终验证同时进行

而不是验证e.KeyChar ,而是验证控件本身的内容:

if(!_rolfRegex.IsMatch((sender as TextBox)?.Value.ToUpper())
    e.Handled = true;

您的模式必须为^C[AH]$ 输入开始( ^ ),跟随C,然后跟随A或H( [AH] ),然后结束输入( $ )。

private Regex _regex = new Regex(@"^C[AH]$");

private void txtCaCh_KeyPress(object sender, KeyPressEventArgs e)
{
    if (char.IsControl(e.KeyChar))
        return;

    var txtBox = (TextBox)sender;
    if (txtBox.Text != null && _rolfRegex.IsMatch(txtBox.Text.ToUpper()))
    {
        // TODO now we have match, handle it
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM