如何限制用户只输入单个字符,即" Y"和" N"使用正则表达式

时间:2016-08-10 16:49:42

标签: c# regex

我试图限制用户输入单个字符," Y"或" N"除此之外别无他物。我尝试了下面的正则表达式,但它不起作用:

^(Y | N){1} $

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
      Regex r = new Regex(@"^(Y|N){1}$");
        r.IsMatch(textBox1.Text);
    }

我使用的正则表达式无效。如何限制用户输入单个字符,该字符只能是" Y"或" N"

5 个答案:

答案 0 :(得分:2)

您可以尝试以下正则表达式: ^ [YN] $

它只会匹配字符Y和N,如果需要,您还可以添加更多字符。

答案 1 :(得分:1)

如果您愿意放弃正则表达式,可以执行以下操作之一:

  • 必须是单个字符(任何单个字符):

    if (textBox1.Text.Length == 1)
    
  • 必须是单个字符YN

    if (new[] { "Y", "N" }.Contains(textBox1.Text))
    

如果你必须拥有正则表达式,那么Vivek的建议很简单:

    if (new Regex(@"^[YN]$").IsMatch(textBox1.Text))

答案 2 :(得分:1)

请记住,如果您只关心KeyPress,用户仍然可以通过鼠标右键单击来粘贴一些文字。我不会使用TextBox,但如果你真的喜欢这样,我会改用其他事件:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string text = ((TextBox)sender).Text.ToUpper();
    if (text.Length > 1)
        text = text.Substring(0, 1);
    if (text != "Y" && text != "N")
        text = "";
    ((TextBox)sender).Text = text;
}

这样,您始终可以在文本框中获得大写YN,用户可以轻松更改值,而无需按退格键。

答案 3 :(得分:0)

你为什么这么难?

if(textBox1.Text.Equals("Y") || textBox1.Text.Equals("N")) 

答案 4 :(得分:0)

该代码不完整。您可能需要某种条件来实际执行限制:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
      Regex r = new Regex(@"^(Y|N){1}$");
      if (r.IsMatch(textBox1.Text)==false) {
          //do something, like popping an alert or making e.Handled = true to cancel the event.
      }
    }

至于要使用的正则表达式,你的应该使用(或者你可以使用其他用户提出的建议之一)。