2013-04-02 57 views
1

我有一個文本框中,我正在使用事件TextChanged來檢查該字符串是否與RegEx有效,並顯示一個消息框,如果它沒有。當我使用在線正則表達式工具(如http://regexpal.com/)測試正則表達式時,它似乎工作正常。但是當我運行我的代碼時,它不能按預期工作。我從來沒有看到消息框出現。任何幫助,將不勝感激。我的正則表達式假設檢查0-5之前的任何數字。有兩位小數(如果有的話)。wpf文本框驗證與正則表達式

private void txtValInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    string input = (sender as TextBox).Text; //1234567 

    if(!Regex.IsMatch(input, @"^\d{1,5}|\d{0,5}\.\d{1,2}$")) 
    { 
      MessageBox.Show("Error!, check and try again"); 
    } 
} 
+0

爲什麼你不使用本地變量輸入?你正在創建它,所以你應該使用它/ IsMatch –

+0

@moncadad - 我已更新。仍然是相同的結果。 – Calvin

回答

1

您需要添加()所以正則表達式是正確固定,否則你的例子匹配,因爲正則表達式是隻檢查是否存在一到五個數字字符串的開始 - 任何能來之後。

@"^(\d{1,5}|\d{0,5}\.\d{1,2})$" 
+0

哦,夥計,謝謝兄弟。我很感激。 – Calvin

+0

你打我回答,+1。 – Greg

1

它不工作的原因是因爲你還沒有內()包含您正則表達式。沒有該標識符,它不能正確地固定你的語法。

你會希望你的表達看起來像這樣:

@"^(\d{1,5}|\d{0,5}\.\d{1,2})$

請記住,您可能還增加了額外的複雜性您表達

要闡述:

  • ^:會搶第一個字符或線。
  • \d:將抓住所有的數字字符。
  • $:會停在行尾或最後一個字符。

我想在第二張照片上拍一張照片。如果你真的做了\d+它會抓取所有數字字符和之後的所有數字。這可能會使您的請求輕鬆一點;但我不確定你在尋找什麼。

希望有幫助,我看到一個灰1答案框所以別人發佈,所以你應該很容易找到一個解決方案卡爾文。

+0

感謝您的期待。 =) – Calvin