验证SQL列列表的标头名称

时间:2013-05-29 14:01:51

标签: c# regex

我目前正在尝试为人们输入用户友好的输入,以便为使用临时表创建的CSV输入SQL标头,但是我在验证和更改名称到SQL友好列标题方面存在问题。

示例输入如下:

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

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

名称年龄性别birth_place竞赛

但是我在检查无效字符时遇到了问题(我还没有真正解决过这个问题。)但我目前的主要问题是检查单词之间的空格,它们应该在开头有空格和其他空格的话。

我当前的输出结果为(请注意,无效字符将在稍后进行测试。):

将Ag-e性别出生地命名为Rac + e

请注意,除了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);

1 个答案:

答案 0 :(得分:0)

我以为你说输入就像第一个字符串,逗号分隔。 这不起作用吗?您所要做的就是删除不需要的字符(黑名单)

        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());