Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使正则表达式检查给定字符串以外的其他符号?_C#_Regex - Fatal编程技术网

C# 如何使正则表达式检查给定字符串以外的其他符号?

C# 如何使正则表达式检查给定字符串以外的其他符号?,c#,regex,C#,Regex,我需要制作一个正则表达式,检查输入字符串是否包含除charRange字符串中的符号以外的其他符号 给定字符串: string charRange = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,:;-?! '()$%&\""; 以下是您应该如何使用此功能的完整示例: string charRange = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn

我需要制作一个正则表达式,检查输入字符串是否包含除charRange字符串中的符号以外的其他符号

给定字符串:

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,因为
^
意味着搜索组中未指定的任何字符