正则表达式检查字符串是否包含指定的字符
如何使用正则表达式检查字符串是否仅包含指定的字符?
示例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,则表示该字符串确实包含非法字符。