正则表达式检查字符串是否包含指定的字符

时间:2013-02-28 22:55:39

标签: c# asp.net .net regex vb.net

如何使用正则表达式检查字符串是否包含指定的字符?

示例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。

3 个答案:

答案 0 :(得分:11)

您的正则表达式不正确。你正在检查什么

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

将匹配除ASCII大写或小写字母或十进制数字以外的任何单个字符。如果你想检查字符串是否只包含 字母和数字,你可以说:

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

以上正则表达式将匹配行首锚(^),后跟重复1次或更多次([A-Za-z0-9])的字母或数字(+),然后是行尾锚($)。

应该注意空格和标点符号:在原始示例中,测试字符串将匹配找到的第一个字符,而不是大写或小写字母或十进制数字,偏移量处的SP(空格)字符+ 4。

答案 1 :(得分:0)

正则表达式中的^符号基本上意味着“NOT ...”,因此删除它我们有一个良好的开端。你还想确保长度超过一个字符的字符串是可能的,然后通过添加一个加号,我们告诉表达式寻找匹配'1个字符或更长的字符'。最后,通过在括号前添加^ ,在加号后添加$ ,表达式必须与整个字符串匹配,而不仅仅是它的一部分。

那是:

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

答案 2 :(得分:0)

克拉字符(^)表示您要匹配括号中的所有字符。

在第一个例子中,它匹配句点(。)。

在第二个例子中,它匹配括号([])和句点(。)。

你只需要翻转你的逻辑。如果返回true,则表示字符串 包含非法字符。