C#格式化 - 如何正确格式化名称?即姓氏或姓氏

时间:2009-02-11 09:38:03

标签: string compact-framework formatting c#-2.0

我目前正在被我的一个系统上显示和输入的所有名称视觉攻击。基本上,用户使用屏幕键盘,并不倾向于整齐地写东西!即约翰史密斯最终以约翰史密斯或约翰史密斯的身份进入。

我想要一种整齐地输入名称并显示它们的方法。我已经编写了一个遍历所有名称的方法并且做到了这一点,但它大约有20行代码并且效率不高。

有没有一种很好的方法来实现这一目标?我试过.ToTitleCase(),但它不适用于像O'Brien和McCarthy这样的案件?有没有什么可以做到这一点,很好吗?我的代码目前基本上都有一个特殊情况列表,如果它们包含特殊情况则会通过并操作它们......虽然这不是世界上最有效的事情。

提前致谢。

6 个答案:

答案 0 :(得分:5)

真的重要吗?如果用户不关心他们的名字是全是大写还是小写,那么我建议你也不用担心。

关心他们的名字如何大写的用户可能会小心地输入他们的名字。

如果你开始搞乱大写,那就有可能弄错并冒犯用户。

当然,系统的其他方面需要更多关注......

答案 1 :(得分:2)

正如您已经建议的那样,没有真正简单的方法可以实现这一点,而无需处理总是被名字抛出的特殊情况。

这个问题有几条建议可能对您有所帮助:

How do I capitalize first letter of first name and last name in C#?

答案 2 :(得分:2)

我有一个客户端坚持某种级别的自动格式。 以下代码正确解析了所有以前的海报示例。 我们只运行一次并在表单上设置标志,以便用户IF受挫可以覆盖自动设置。 反馈实际上非常积极。 希望这有助于那里的人。

public string FormalFormat(string inString)
{
    string outString = string.Empty;
    string _ErrorMessage = string.Empty;
    try
    {
        // Formal Format is made for names and addresses to assure 
        // proper formatting and capitalization
        if (string.IsNullOrEmpty(inString))
        {
            return string.Empty;
        }
        inString = inString.Trim();
        if (string.IsNullOrEmpty(inString))
        {
            return string.Empty;
        }
        // see if this is a word or a series of words
        //if(inString.IndexOf(" ") > 0)
        //{
        // Break out each word in the string. 
        char[] charSep = { ' ' };
        string[] aWords = inString.Split(charSep);
        int i = 0;
        int CapAfterHyphen = 0;
        for (i = 0; i < aWords.Length; i++)
        {

            string Word = aWords[i].Trim();
            CapAfterHyphen = Word.IndexOf("-");
            char[] chars = Word.ToCharArray();
            if (chars.Length > 3)
            {
                if (Char.IsLower(chars[1]) && Char.IsUpper(chars[2]))
                {
                    Word = Word.Substring(0, 1).ToUpper() + Word.Substring(1, 1).ToLower() + Word.Substring(2, 1).ToUpper() + Word.Substring(3).ToLower();
                }
                else
                {
                    Word = Word.Substring(0, 1).ToUpper() + Word.Substring(1).ToLower();
                }
            }
            if (CapAfterHyphen > 0)
            {
                Word = Word.Substring(0, CapAfterHyphen + 1) + Word.Substring(CapAfterHyphen + 1, 1).ToUpper() + Word.Substring(CapAfterHyphen + 2);
            }
            if (i > 0)
            {
                outString += " " + Word;
            }
            else
            {
                outString = Word;
            }
        }
    }
    catch (Exception e)
    {
        outString = inString;
        _ErrorMessage = e.Message;
    }
    return outString;
}

答案 3 :(得分:0)

当中国人,日本人,阿拉伯人,希伯来人和来自世界各地的许多人加入你的系统时,就会出现问题......

全球化思考。对爱尔兰人来说已经很难了:P

或许向您的用户展示如何显示名称,他们会更加小心。

答案 4 :(得分:0)

还要考虑到,对于某些文化来说,它的姓氏首先是名字,而不是姓氏。

此外,一些名字不仅仅是两三个字。考虑:

  • Manuel de la Cruz
  • Shawn van DeMark
  • Alice St. Claire
  • Anna Eastman-Smith
  • Po Yin
  • 胡志明
  • Julia Running Bear
  • 与灵魂交谈

(最后一个是美国原住民名字,没有姓氏。)

答案 5 :(得分:0)

我认为格式很重要。格式错误的名称在列表或信封上看起来很糟糕(至少在我看来)。我总是觉得要正确格式化它们的冲动。它几乎是我的一个痴迷。

所以DanD,这就是这样做:当用户在我的应用程序中输入他们的全名时,我修剪()所有名称,删除双空格然后格式化所有名称在Proper案件。然后,我会向用户显示名称,并提示如下:“我们是否正确格式化了您的姓名?”并为用户提供纠正格式的机会。在此之后,我只保存名称。 祝好运。