C# 如何使正则表达式检查给定字符串以外的其他符号?
我需要制作一个正则表达式,检查输入字符串是否包含除charRange字符串中的符号以外的其他符号 给定字符串:C# 如何使正则表达式检查给定字符串以外的其他符号?,c#,regex,C#,Regex,我需要制作一个正则表达式,检查输入字符串是否包含除charRange字符串中的符号以外的其他符号 给定字符串: string charRange = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;-?! '()$%&\""; 以下是您应该如何使用此功能的完整示例: string charRange = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn
string charRange =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;-?! '()$%&\"";
以下是您应该如何使用此功能的完整示例:
string charRange = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;\-?! '()$%&""";
foreach(Match a in new Regex("[^"+charRange+"]").Matches("-7Rt1Vp2RV"))
{
Console.WriteLine(a.Value);
}
-
是特殊符号,必须带有\
。
这就是你得到答案的原因。以下是你应该如何使用它的完整示例:
string charRange = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;\-?! '()$%&""";
foreach(Match a in new Regex("[^"+charRange+"]").Matches("-7Rt1Vp2RV"))
{
Console.WriteLine(a.Value);
}
-
是特殊符号,必须带有\
。
这就是您得到正确答案的原因。如果您只是检查一个字符串是否包含另一个字符串中的字符,请使用Linq:
var stringContainsOtherSymbol = !stringToCheck.All(c => stringOfAllowedChars.Contains(c))
使用正则表达式只会让您绊倒,因为您必须在
stringOfAllowedChars
中转义正则表达式元字符。如果您只是检查一个字符串是否在另一个字符串中不包含字符,请使用Linq:
var stringContainsOtherSymbol = !stringToCheck.All(c => stringOfAllowedChars.Contains(c))
使用正则表达式只会让你绊倒,因为对于给定的范围和值,你必须在
stringOfAllowedChars
中转义正则表达式元字符
string charRange =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;-?! '()$%&\"";
string value = "-7Rt1Vp2RV";
Linq解决方案(更短,可读性更强):
如果您坚持使用正则表达式:
bool hasOutOfRangeChar = !Regex.IsMatch(value, "^[" + Regex.Escape(charRange) + "]*$");
请注意
Regex.Escape
,因为-
在[…]
-范围内时具有特殊含义;e、 g.;-代码>指中的任何符号对于给定的范围和值,代码>到?
string charRange =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;-?! '()$%&\"";
string value = "-7Rt1Vp2RV";
Linq解决方案(更短,可读性更强):
如果您坚持使用正则表达式:
bool hasOutOfRangeChar = !Regex.IsMatch(value, "^[" + Regex.Escape(charRange) + "]*$");
请注意Regex.Escape
,因为-
在[…]
-范围内时具有特殊含义;e、 g.;-代码>指中的任何符号
到?
这是不正确的,因为某些字符在字符类中仍然是特殊的。我不明白为什么在运行此控制台时会出现这种情况。WriteLine(新的正则表达式(“[^”+charRange+”).IsMatch(“-7Rt1Vp2RV”)
@AlexGeorgievskiy,因为^
意味着搜索未在组中指定的任何字符。这是不正确的,因为某些字符在字符类中仍然是特殊的。我不明白为什么在运行此控制台时会得到True。WriteLine(新的正则表达式(“[^”+charRange+”)。IsMatch(“-7Rt1Vp2RV”)
@AlexGeorgievskiy,因为^
意味着搜索组中未指定的任何字符