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