2016-08-10 28 views
-1

我試圖限制用戶輸入單個字符,「Y」或「N」,除了那。我想下面的正則表達式,但它不工作:如何限制用戶只輸入單個字符,即使用正則表達式輸入「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」的單個字符

+3

爲什麼不這樣做:'if(textBox1.Text ==「Y」|| textbox1.Text ==「N」)'? –

+1

我知道它不能回答你的問題,但是簡單的複選框會更有意義嗎? – sous2817

+0

你爲什麼說它不能正常工作....我只是跑這個...而IsMatch被設置爲true ... 正則表達式r = new Regex(@「^(Y | N){1} $」 ); var isMatch = r.IsMatch(「Y」); 也許你錯過了下面的代碼... – pmeyer

回答

0

爲什麼你難以做到?

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

有一個額外的'如果('那裏。 – Andrew

1

如果你願意放棄正則表達式,您可以執行下列操作之一:

  • 必須是單個字符(任何單個字符):

    if (textBox1.Text.Length == 1) 
    
  • 必須是單個字符YN

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

如果必須有一個正則表達式,然後維韋克的建議是好的和簡單:

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

你可以試試下面的正則表達式: ^ [YN] $

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

+0

不要忘記使用'RegexOptions.IgnoreCase'。 – Andrew

+0

無論如何,我覺得這裏最困難的部分是如何控制文本框,而不是正則表達式的一部分。這就是爲什麼我寧願使用在'TextChanged'事件。 – Andrew

+0

@Andrew,我覺得OP只是尋求這將限制輸入「Y」和「N」,但對正則表達式,使用忽略是因爲如果輸入是將處理更多真實場景​​更好來自用戶。 –

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

至於正則表達式使用,你應該工作(或者你可以使用的其他用戶提出的建議之一)。

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可以輕鬆更改數值,而無需按退格鍵。

相關問題