对于下面的代码,我想:
strPattern.IsMatch("@!*()[]{}:?.,^%#$~`:;'_-@!*()[]{}/\\")
是真的,但我在正则表达式中放置的几乎所有内容都返回false
基本上我想要:
其他一切都应该失败
string escapedPattern1 = Regex.Escape("@!*()[]{}");
string escapedPattern2 = Regex.Escape(":?.,^%#$~`:;'_-");
string escapedPattern3 = Regex.Escape("@!*()[]{}");
string escapedPattern4 = Regex.Escape(@"/\\");
string stripped = securityHelper.StripHtml(value);
string totalPattern = "0-9A-Za-z&" + escapedPattern1 + escapedPattern2 + escapedPattern3 + escapedPattern4;
Regex strPattern = new Regex("^[" + totalPattern + "]*$");
答案 0 :(得分:2)
Regex.Escape
不处理“ - ”或“]”,对于字符类的内容通常不适合。在这种情况下,结果正则表达式将是错误的 1 ,因为它们都有其特殊含义。
我只是简化它并手动编写。我还删除了多余的字符并修复了其他各种问题。
Regex p = new Regex(@"^[]0-9A-Za-z&[@!*(){}:?.,^%#$~`;'_/\\-]*$");
p.IsMatch("@!*()[]{}:?.,^%#$~`:;'_-@!*()[]{}/\\") // -> true
p.IsMatch("Hello`World!") // -> true
p.IsMatch("@<") // -> false
注意:
]
,请将其写为[]..]
或(逐字)[..\]..]
。-
,请将其写为[..-]
或(逐字)[..\-..]
。另外,“剥离HTML”是无关的。
1 原始帖子中的结果正则表达式是
^[0-9A-Za-z&@!\*\(\)\[]\{}:\?\.,\^%\#\$~`:;'_-@!\*\(\)\[]\{}/\\\\]*$
并且在虚拟占位符中替换后很容易发现错误。
^[characterclass]\{}:\?\.,\^%\#\$~`:;'_-@!\*\(\)\[]\{}/\\\\]*$