C# 验证SQL列列表的标题名称

C# 验证SQL列列表的标题名称,c#,regex,C#,Regex,我目前正在尝试为用户提供一个用户友好的输入,以便为使用临时表创建的CSV输入SQL标题,但是我在验证名称并将其更改为SQL友好的列标题时遇到问题 输入示例如下: 姓名、Ag-e、性别、出生地、Rac+e 请记住,输入可以是任何单词,这些只是一个示例。 我理想的最终输出是SQL列标题 姓名年龄性别出生地点种族 然而,我在检查无效字符时遇到了一些问题(实际上我还没有找到答案),但我目前遇到的主要问题是检查单词之间的空格,这些空格应该在单词的开头有空格和其他空格 我的当前输出为(请注意,无效字符用于稍

我目前正在尝试为用户提供一个用户友好的输入,以便为使用临时表创建的CSV输入SQL标题,但是我在验证名称并将其更改为SQL友好的列标题时遇到问题

输入示例如下:

姓名、Ag-e、性别、出生地、Rac+e

请记住,输入可以是任何单词,这些只是一个示例。 我理想的最终输出是SQL列标题

姓名年龄性别出生地点种族

然而,我在检查无效字符时遇到了一些问题(实际上我还没有找到答案),但我目前遇到的主要问题是检查单词之间的空格,这些空格应该在单词的开头有空格和其他空格

我的当前输出为(请注意,无效字符用于稍后的测试):

姓名Ag-e性别出生地Rac+e

请注意,除了出生地外,每个人之间都有两个空格,出生地应有一个空格

我目前用于实现这一目标的代码(或者您可以清楚地看到未实现的代码)是:

columnNamesList=新列表(columnNames.Split(splitChar));
columnNamesList[0]=columnNamesList[0].Trim();
columnNamesList[columnNamesList.Count-1]=columnNamesList[columnNamesList.Count-1]。TrimEnd();
List removalList=新列表();
foreach(columnNamesList中的字符串i)
{
if(string.IsNullOrEmpty(i))
{
删除列表。添加(i);
}
}
如果(removalList.Count<0)
{
foreach(removalList中的字符串i)
{
列名称列表。删除(i);
}
}
for(int i=0;i
我想你说过输入就像第一个字符串,用逗号分隔。 这不管用吗?您所要做的就是删除不需要的字符(针对黑名单)


你不能把所有的列名都用“[”和“]”来包装吗?例如,
[Birth Place]
我可以让实际的查询停止关键字的问题,但是我不认为在列名中有空格是可以接受的。恐怕不行,因为我需要在空格上找到某种形式的验证。
            columnNamesList = new List<string>(columnNames.Split(splitChar));
        columnNamesList[0] = columnNamesList[0].Trim();
        columnNamesList[columnNamesList.Count - 1] = columnNamesList[columnNamesList.Count - 1].TrimEnd();
        List<string> removalList = new List<string>();

        foreach (string i in columnNamesList)
        {
            if (string.IsNullOrEmpty(i))
            {
                removalList.Add(i);
            }
        }

        if (removalList.Count < 0)
        {
            foreach (string i in removalList)
            {
                columnNamesList.Remove(i);
            }
        }


        for (int i = 0; i < columnNamesList.Count; i++)
        {
            string s = string.Empty;
            string str = columnNamesList[i];

            if (Regex.IsMatch(str, @"\w\s\w+", RegexOptions.IgnoreCase))
            {
                foreach (char c in str)
                {
                    if (Char.IsLetterOrDigit(c) || c == ' ' || c == ',')
                        s += c;
                    s = s.Replace(' ', '_');
                    columnNamesList[i] = s;
                }
            }
        }

        string[] columnArray = columnNamesList.ToArray<string>();
        columnNames = String.Join(" ", columnArray);
        var input = "Name, Ag-e, Gender, Birth Place, Rac+e";
        var splitInput = input.Split(',')
            .Select(i => 
                i.Trim()
                .ToLower()  
                .Replace(' ','_'));
        var output = string.Join(" ", splitInput.ToArray());