.NET Regex用于列入白名单的字符

p.c*_*ell 4 .net c# regex

考虑一种算法,需要确定a是否string包含白名单字符之外的任何字符.

白名单看起来像这样:

'-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÖÜáíóúñÑÀÁÂÃÈÊËÌÍÎÏÐÒÓÔÕØÙÚÛÝßãðõøýþÿ

注意:此白名单中需要包含空格和撇号.

通常,这将是一个静态方法,但它将转换为扩展方法.

private bool ContainsAllWhitelistedCharacters(string input)
{
  string regExPattern="";// the whitelist
  return Regex.IsMatch(input, regExPattern);
}
Run Code Online (Sandbox Code Playgroud)

注意事项:

感谢所有回答者的表现评论.性能不是问题.质量,可读性和可维护性!更少的代码=减少缺陷的机会,IMO.

题:

这个白名单正则表达式应该是什么样的?

Kel*_*sey 5

您可以使用以下方法进行模式匹配:

^([\-\.a-zA-Z ÇüéâäàåçêëèïîíìÄÅÉæÆôöòûùÖÜáíóúñÑÀÁÂÃÈÊËÌÍÎÏÐÒÓÔÕØÙÚÛÝßãðõøýþÿ]+)$
Run Code Online (Sandbox Code Playgroud)

使其成为扩展方法:

public static bool IsValidCustom(this string value)
{
    string regExPattern="^([\-\.a-zA-Z ÇüéâäàåçêëèïîíìÄÅÉæÆôöòûùÖÜáíóúñÑÀÁÂÃÈÊËÌÍÎÏÐÒÓÔÕØÙÚÛÝßãðõøýþÿ]+)$";
    return Regex.IsMatch(input, regExPattern);
}
Run Code Online (Sandbox Code Playgroud)

由于字符的顺序不明显,我想不出一种简单的方法来使用扩展字符进行可维护的范围。


Mar*_*off 5

为什么它必须是一个正则表达式?

private bool ContainsAllWhitelistedCharacters(string input)
{
  string whitelist = "abcdefg...";
  foreach (char c in input) {
    if (whitelist.IndexOf(c) == -1)
      return false;
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)

如果您不确定如何实现所需的那个并且您没有分析该部分代码并且发现您需要额外的性能,则无需直接进入正则表达式.