2013-02-28 112 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,那么您知道字符串包含包含非法字符。

相关问题