在我的代码中,我正在为name property of a FrameworkElement分配一个字符串。此String是从应用程序的另一部分自动生成的,表示Java源代码中的方法名称,因此我想检查它是否包含有效名称。
目前我这样做:
private string getValidName(String s)
{
return s.Replace("<", "").Replace(">", "").Replace("#", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace(".", "").Replace("$", "").Replace(" ", "");
}
但问题是我不知道要替换哪些字母。例如,在这个代码中[和]丢失了,因为当我遇到异常时我发现了。
所以我的问题是。是否有允许符号列表?如果是,我该如何以合理的方式实现这一点?
答案 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 );
} );