C # Форматирование - Как правильно отформатировать имя? То есть имя или фамилия - PullRequest
2 голосов
/ 11 февраля 2009

В настоящее время на меня визуально нападают все имена, которые отображаются и вводятся в одной из моих систем. По сути, пользователи используют экранную клавиатуру и не склонны писать аккуратно! То есть Джон Смит заканчивает тем, что вошел как ДЖОН СМИТ или Джон Смит.

Мне нужен способ аккуратно вводить имена и отображать их. Я написал метод, который обрабатывает все имена и делает именно это, но содержит около 20 строк кода и не очень эффективен.

Есть ли хороший способ достичь этого? Я пробовал .ToTitleCase (), но он не работает для таких случаев, как О'Брайен и Маккарти? Есть что-нибудь, что может сделать это, хорошо? Мой код на данный момент в основном имеет список особых случаев и обрабатывает их, если они содержат особый случай ... Хотя это не самая эффективная вещь в мире.

Заранее спасибо.

Ответы [ 6 ]

5 голосов
/ 11 февраля 2009

Это действительно имеет значение? Если пользователю все равно, будет ли его имя прописным или строчным, я бы посоветовал вам не беспокоиться об этом.

Пользователи, которым небезразлично, как их имя пишется с заглавной буквы, вероятно, будут вводить свое имя с осторожностью.

Если вы начнете возиться с заглавными буквами, есть риск ошибиться и обидеть пользователя.

Конечно, есть и другие аспекты системы, которые заслуживают большего внимания ...

2 голосов
/ 07 сентября 2011

У меня был клиент, настаивающий на каком-то уровне автоформатирования. Следующий код правильно разрешил все предыдущие примеры постеров. Мы запускаем его только один раз и устанавливаем флаги в форме, чтобы разочарованный пользователь 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;
}
2 голосов
/ 11 февраля 2009

Как вы уже предположили, нет простого способа достичь этого без необходимости обрабатывать особые случаи, которые всегда приводят к именам.

Этот вопрос имеет несколько советов, которые могут быть вам полезны:

Как мне прописать первую букву имени и фамилии в C #?

0 голосов
/ 17 июня 2009

Я считаю, что форматирование имеет значение. Плохо отформатированные имена плохо выглядят в списке или на конверте (по крайней мере, на мой взгляд). Я всегда чувствую желание правильно их отформатировать. Это почти моя одержимость.

Итак, DanD, вот как I делает это: когда пользователь вводит свое полное имя в мое приложение, я обрезаю () все имена, удаляю двойные пробелы, а затем форматирую все имена в правильном регистре , Затем я отображаю имена пользователей с подсказкой вроде: «Правильно ли мы отформатировали ваши имена?» и дать пользователю возможность исправить форматирование. После этого я просто сохраняю имена. Удачи.

0 голосов
/ 11 февраля 2009

Также учтите, что в некоторых культурах сначала идет фамилия, затем имя, просто фамилия отсутствует.

Кроме того, некоторые имена - это больше, чем просто два или три слова. Рассмотрим:

  • Мануэль де ла Круз
  • Шон ван Демарк
  • Алиса Сен-Клер
  • Анна Истман-Смит
  • По Инь
  • Хо Ши Мин
  • Юлия Бегущий медведь
  • Беседы с духами

(Последний был коренным американцем по имени без фамилии.)

0 голосов
/ 11 февраля 2009

Проблема возникнет, когда к вашей системе присоединятся китайский, японский, арабский, иврит и многие другие люди со всего мира ...

Думай глобально. Это уже сложно сделать с ирландцами: P

Возможно, покажите своим пользователям, как там будет отображаться имя, они будут немного осторожнее.

...