2012-12-31 53 views
1

我需要在用戶在datagridview中輸入特殊字符時填充錯誤消息。截至目前,我有以下:如何禁止特殊字符,但在正則表達式中允許空格?

if (Regex.IsMatch(columnValue.ToString(),"^[A-Za-z0-9]$")) 
       { 
        MessageBox.Show("You may not use special characters.", "Saving not allowed at this time", MessageBoxButtons.OK, MessageBoxIcon.Error); 

這個表達式的作品,並且不允許特殊字符,但它是落在if語句,如果有字符之間的空間,這應該被允許。

如何讓它允許空格而不是特殊字符?

感謝,

回答

6

我覺得你只是想空間添加到您的正則表達式:

if (Regex.IsMatch(columnValue.ToString(),"^[ A-Za-z0-9]$")) 

當編寫正則表達式,通常是使用逐字字符串操作@因爲許多獨特的表達的需要,你的好習慣使用反斜槓字符。

if (Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$")) 

如果您明確告訴正則表達式忽略模式中的空格,則需要轉義空格字符。

if (Regex.IsMatch(columnValue.ToString(), @"^[\ A-Za-z0-9]$", RegexOption.IgnorePatternWhitespace)) 

如果你希望他們能夠使用任何空白字符(空格,製表符,換行符,等等),你可以使用空格字符類\s

if (Regex.IsMatch(columnValue.ToString(), @"^[\sA-Za-z0-9]$")) 

更新

看來你可能想要一個排除組中字符的正則表達式。

您當前的正則表達式從字符串^字符串$的年底開始尋找一個字符組A-Za-z0-9英寸如果你想匹配正好相反,你可以使用不操作!Regex.IsMatch之前,如:

if (!Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$")) 

但是,如果你想寫一個字符排除組正則表達式,你可以把一個^你組。當^位於組[^]之內時,其後的任何字符將從匹配中排除。

正則表達式[A-Z]可以匹配任何字符A-Z。正則表達式[^A-Z]將匹配任何字符A-Z。

如果這是你要找的人,你可以你的聲明更改爲:

if (Regex.IsMatch(columnValue.ToString(), @"[^A-Za-z0-9\ ]")) 

此語句將匹配任何包含字符不是組中的任何字符串。所以如果他們輸入「Hello World」,它就不會匹配。如果他們輸入「Hello!World」,它會匹配,因爲「!」不在組中。

注意:前導^和尾隨$已被刪除。在這個正則表達式中,我們不關心字符串的長度,因爲我們只匹配一個字符串中我們並不期待的字符。

+0

感謝您的出色解釋,但是當我使用上面的正則表達式時,字符串「2」如何落入if語句中? – user1683987

+0

再次感謝您的答案,對於那個愚蠢的問題感到抱歉:D – user1683987

0

在字符類添加一個空格,即使用^[A-Za-z0-9 ]$代替^[A-Za-z0-9]$。這仍然會禁止其他空格字符,如tab

0

你可以包括所有的數字,字符串和空間:)

"^[a-z]|[A-Z]|[0-9]|[ ]$" 

"^[\d+]|[\w+]|[ ]$" 
+2

如果它的BoNCoDiGo –

+0

@Aniket更關注包含數字和字符串的空間,而不是UpperLower的情況;),因爲OP已經知道CASE在他的問題中。 – bonCodigo

+0

我希望'[\ d +]'不是要表示「一個或多個數字」。 –

0

爲什麼不試試這個表達式:[a-zA-Z0-9\s]+

3
if (Regex.IsMatch(columnValue.ToString(),"^[A-Za-z0-9 ]+$")) 
{ 
    MessageBox.Show("You may not use special characters.", "Saving not allowed at this time", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 

或單個布爾檢查測試

bool isValid = Regex.IsMatch(columnValue, "^[a-z0-9 ]+$", RegexOptions.IgnoreCase); 
相關問題