2013-02-28 832 views
7

如何檢查字符串是否僅包含使用正則表達式指定字符?正則表達式來檢查字符串是否包含指定字符

例1:檢查是否字符串包含字母和/或數字:

我的嘗試:

Regex rgx = new Regex("[^A-Za-z0-9]"); 
string s = "This is a string."; 

if (rgx.IsMatch(s)) 
{ 
    // true 
} 
else 
{ 
    // false; 
} 

上面的實例應該返回false(因爲我不想以允許期限),但它返回true。

實施例2:只有字母和/或號碼和/或空間和/或括號被允許:

Regex rgx = new Regex("[^A-Za-z0-9() ]"); 
string s = "This is a [string]."; 

if (rgx.IsMatch(s)) 
{ 
    // true 
} 
else 
{ 
    // false; 
} 

同樣,第二實施例應該返回false(因爲我不想允許括號或句點),但是它返回true。

回答

10

你的正則表達式是不正確的。什麼你檢查

Regex rgx = new Regex("[^A-Za-z0-9]"); 

將匹配任何字符比一個ASCII大寫或小寫字母或十進制數字等。如果你想檢查一個字符串包含的字母和數字僅僅,你可以說:

Regex rx = new Regex("^[A-Za-z0-9]+$"); 

上述正則表達式將匹配開始的行錨(^),後跟一個字母或([A-Za-z0-9])重複一次或多次(+),後接行尾錨點($)。

請注意空格和標點符號:在您的原始示例中,測試字符串將匹配除大寫或小寫字母或小數位以外的第一個字符,偏移量爲SP(空格)的字符+4。

0

你的正則表達式中的^符號基本上意味着「不...」,所以通過刪除我們有一個好的開始。您還需要確保長度超過一個字符的字符串是可能的,並且之後通過添加一個加號,我們告訴表達式查找匹配'1個字符或更長'。最後,在之前加上^的括號,而$之後的加號後,表達式必須匹配整個字符串,而不僅僅是它的一部分。

即:

Regex rgx = new Regex("^[A-Za-z0-9() ]+$"); 
0

克拉字符(^)表示要匹配不在括號所有字符。

在第一個示例中,它與句點(。)匹配。

在第二個示例中,它與括號([])和句點(。)匹配。

你只需要翻轉你的邏輯。如果返回true,那麼您知道字符串包含包含非法字符。

相關問題