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

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

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

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

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

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

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

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

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

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

那是:

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

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

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

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

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