空格和正则表达式

时间:2020-05-14 13:22:33

标签: c# regex

我需要确定字符串是否包含无效字符。标准是,它只能包含[a-z][A-Z][0-9][/,.-\]字符,并且其他任何内容都是无效。此外,字符,后跟空格,然后是/,然后是空格,然后是字符,也是有效。我在下面使用的正则表达式可以满足第一个条件,但是我正在努力处理第二个条件。我尝试了很多组合,类似的方法,但没有成功。

public bool ContainsInvalidChars(string s)
{
    return new Regex(@"[^a-zA-Z0-9/,.-][@"\s/\s"]).IsMatch(s);
}

Examples of input strings:

below is Valid
CSU,USD,6230.67,705RA0 / 2YKMP,5/11/2020,5/11/2020,VM

below is invalid
CSU,USD,6230.67,705RA0 /2YKMP,5/11/2020,5/11/2020,VM

below is invalid
CSU, USD,6230.67,705RA0 / 2YKMP,5/11/2020,5/11/2020,VM

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用字符类,并在以空格/开始的组中再重复0次以上,然后再重复字符类。

^[a-zA-Z0-9/,.-]+(?: / [a-zA-Z0-9/,.-]+)*$

Regex demo | C# demo

代码可能类似于

public bool ContainsInvalidChars(string s)
{
    return new Regex(@"^[a-zA-Z0-9/,.-]+(?: / [a-zA-Z0-9/,.-]+)*$").IsMatch(s);
}

答案 1 :(得分:0)

您有两种有效的块:

[a-zA-Z0-9/,.-]
\s/\s

让它们任意组合(注意 ^$-我们希望整个字符串匹配)

^(?:(?:\s/\s)*[a-zA-Z0-9/,.-]*)*$

最后,无效表示不匹配

代码:

 public static bool ContainsInvalidChars(string s) =>
   !Regex.IsMatch(s, @"^(?:(?:\s/\s)*[a-zA-Z0-9/,.-]*)*$"); 

演示:

string[] tests = new string[] {
  @"CSU,USD,6230.67,705RA0 / 2YKMP,5/11/2020,5/11/2020,VM",
  @"CSU,USD,6230.67,705RA0 /2YKMP,5/11/2020,5/11/2020,VM",
  @"CSU, USD,6230.67,705RA0 / 2YKMP,5/11/2020,5/11/2020,VM",
};

string report = string.Join(Environment.NewLine, tests
  .Select(test => $"{test,-60} :: {(ContainsInvalidChars(test) ? "Invalid" : "Valid")}"));   

Console.Write(report);

结果:

CSU,USD,6230.67,705RA0 / 2YKMP,5/11/2020,5/11/2020,VM        :: Valid
CSU,USD,6230.67,705RA0 /2YKMP,5/11/2020,5/11/2020,VM         :: Invalid
CSU, USD,6230.67,705RA0 / 2YKMP,5/11/2020,5/11/2020,VM       :: Invalid

答案 2 :(得分:0)

我建议使用

public bool ContainsInvalidChars(string s)
{
    return Regex.IsMatch(s, @"(?!\s/\s)(?<!\s/(?=\s))[^a-zA-Z0-9/,.-]");
}

请参见regex demo

正则表达式详细信息

  • (?!\s/\s)-不紧跟空格+ / +空格的位置
  • (?<!\s/(?=\s))-不立即以空格+ /开头的位置,然后是空格的后面
  • [^a-zA-Z0-9/,.-]-除ASCII字母,数字,/,.-以外的任何字符。

这两种环顾方法仅排除WHITESPACE + [^a-zA-Z0-9/,.-] + WHITESPACE块中的匹配空白(否则与/匹配)。

相关问题