我只想使用正则表达式,如果字符串中存在一个不是常规可键入字符的字符,它将返回 true/false。这应该是一件容易的事情,不是吗?
我没有模式,我只是想知道是否存在任何不在列表中的字符。
在常规的 RegEx 世界中,我只是:
[^0-9a-zA-Z~`!@#$%\^ &*()_-+={\[}]|\\:;\"'<,>.?/] // <space> before the ampersand
...我知道有点臃肿,但为这篇文章指出了重点...
我发现您无法转义多个保留字符。 例如,Regex ex = Regex.Escape("[") + Regex.Escape("^") 不会命中: “st[前夕”或“st^ve”
如下失败:
string ss = Regex.Escape("[") + Regex.Escape("^");
Regex rx = new Regex(ss);
string s = "st^eve";
rx.IsMatch(s));
还有以下任何一项:
string ss = Regex.Escape("[") + "[0-9]";
Regex rx = new Regex(ss);
string s1 = "st^eve"; rx.IsMatch(s1));
string s2 = "st^ev0e; rx.IsMatch(s2));
string s3 = "stev0e; rx.IsMatch(s3));
但这是唯一不会失败的 Microsoft c# 正则表达式转义字符的使用:
string ss = Regex.Escape("^");
Regex rx = new Regex(ss);
string s = "st^eve"; rx.IsMatch(s));
除了针对非转义字符的测试之外,我是否还必须针对每个需要转义的字符开发单独的测试?
这是其他人在做的吗?
如果有更好的方法,我愿意接受想法吗?
感谢您的考虑。
最佳答案
想想您要生成的表达式。您的示例正则表达式
string ss = Regex.Escape("[") + Regex.Escape("^");
相当于:
string ss = @"\[\^";
也就是说,它不是在寻找[
或 ^
,它是在寻找[
followed通过 ^
。所以 ste[^ve
会匹配。
如果要匹配包含一个或多个字符的任何字符串,则需要添加(非转义)括号以创建一组字符,例如:
string ss = "[" + Regex.Escape("[") + Regex.Escape("^") + "]"
也就是说,您要求 Regex 引擎在括号中的一组字符中查找一个字符。
关于c# - Microsoft asp c# RegEx 转义多个保留字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39808333/