如何检查String是否是WPF中FrameworkElement的有效名称?

时间:2011-03-24 16:22:18

标签: c# .net wpf

在我的代码中,我正在为name property of a FrameworkElement分配一个字符串。此String是从应用程序的另一部分自动生成的,表示Java源代码中的方法名称,因此我想检查它是否包含有效名称。

目前我这样做:

        private string getValidName(String s)
        {
            return s.Replace("<", "").Replace(">", "").Replace("#", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace(".", "").Replace("$", "").Replace(" ", "");
        }

但问题是我不知道要替换哪些字母。例如,在这个代码中[和]丢失了,因为当我遇到异常时我发现了。

所以我的问题是。是否有允许符号列表?如果是,我该如何以合理的方式实现这一点?

2 个答案:

答案 0 :(得分:5)

恕我直言,最实用的方法是用下划线替换不是[a-z][A-Z][0-9]的所有内容,并在前面加上下划线。这样,您可以将任意字符串更改为有效的标识符 我知道这并没有完全回答你的问题,但我认为仍然值得考虑。

您可以使用以下代码实现此目的:

var result = "_" + Regex.Replace(input, @"[^a-zA-Z0-9]", "_");

答案 1 :(得分:4)

为了避免潜在的重复,我还会考虑用唯一的东西替换无效字符的每个出现,例如,UTF-8编码中的十六进制表示:

Regex.Replace( s, @"[^a-zA-Z0-9]",
               m => {
                      var bytes = Encoding.UTF8.GetBytes( m.Value );
                      var hexs = bytes.Select( b => string.Format( "_{0:x2}", b ) );
                      return String.Concat( hexs );
                     } );