如何限制用户只能输入单个字符,即"和“;N"使用正则表达式
本文关键字:quot 正则表达式 用户 何限制 输入 字符 单个 | 更新日期: 2023-09-27 18:01:41
我试图限制用户输入单个字符,"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"的单个字符
您可以尝试以下正则表达式:^ (YN) $
它只匹配字符Y和N,你也可以添加更多的字符,如果需要的话
如果您愿意放弃正则表达式,您可以执行以下操作之一:
-
必须为单个字符(任何单个字符):
if (textBox1.Text.Length == 1)
-
必须是单个字符
Y
或N
中的一个if (new[] { "Y", "N" }.Contains(textBox1.Text))
如果必须有一个正则表达式,那么Vivek的建议是好的和简单的:
if (new Regex(@"^[YN]$").IsMatch(textBox1.Text))
请记住,如果您只关心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;
}
这样你总是在文本框中得到一个大写的Y
或N
,用户可以很容易地改变值,而不必按退格键。
代码不完整。您可能需要某种条件来实际执行限制:
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.
}
}
对于要使用的正则表达式,您的应该可以工作(或者您可以使用其他用户提出的建议之一)。
你为什么这么为难?
if(textBox1.Text.Equals("Y") || textBox1.Text.Equals("N"))