2011-04-21 127 views
2

我使用C#和.NET,我有一個正則表達式看起來像這樣正則表達式數字字符和& -

"\D" 

所有非數字字符,但是我不想匹配到匹配小數點(。)和負號( - )。我如何用正則表達式來做到這一點?

所以,我想克里斯,它它的工作做了一些調整,使:

(我用‘原始’的名稱的文本框)

private void Original_TextChanged(object sender, EventArgs e) { 
     Regex regex = new Regex(@"[^\d.-]", RegexOptions.IgnoreCase); 
     Match match = regex.Match(Original.Text); 
     if (match.Success) { 
      Original.Text = regex.Replace(Original.Text, ""); 
      Original.SelectionStart = Original.TextLength; 
     } 
    } 

Original.SelectionStart = Original.TextLength;是因爲每當它被替換它把選擇開始,這似乎有點怪異的用戶...

回答

5

您可以使用negated character class排除號碼.-。匹配像這樣的單個字符的表達式是[^\d\.\-]。該脫字號表示班級被否定。

Regex.IsMatch("a f", @"^[^\d\.\-]+$"); // true 
Regex.IsMatch("a_f", @"^[^\d\.\-]+$"); // true 
Regex.IsMatch("a.f", @"^[^\d\.\-]+$"); // false 
Regex.IsMatch("af-", @"^[^\d\.\-]+$"); // false 
Regex.IsMatch("-42", @"^[^\d\.\-]+$"); // false 
Regex.IsMatch("4.2", @"^[^\d\.\-]+$"); // false 
+2

實際上沒有必要在該位置處轉義'-':也可以完美地使用'[^ ​​\ d \ .-]'。 – mousio 2011-04-21 22:51:44

+1

@mousio:是的!好點,雖然我總是警惕這樣做:)我猜,愚蠢的迷信。 – 2011-04-21 22:55:06

+2

有沒有必要逃避點。請記住括號內的字符類與正則表達式的其餘部分有幾乎完全不同的語法。 '[^ \ d .-]'實際上可以工作。也就是說,很難責怪人們逃離HYPHEN-MINUS,因爲它和脫字號對於是否需要逃脫才能消除它們的(正常)魔法是非常敏感的。 – tchrist 2011-04-21 22:59:31