Как отобразить первую букву в верхнем регистре?

#php #mysql

Вопрос:

У меня есть fname и lname в моей базе данных, и имя может храниться как ДЖОН ДОУ, джон ДОУ или Джон ДОУ, но в конечном счете я хочу отобразить его как Джон Доу

имя f-Джон, а имя l-Доу

Ответ №1:

Имейте в виду, что существуют и другие форматы капитализации, такие как Джон Макдо, Джон Д’О, Джон де О и Джон ван ден Доу.

Комментарии:

1. у вас также есть варианты, такие как Джон Макдоу против Джона Макдоу

2. Осведомленность о различных форматах капитализации-это отличный момент, но вы не предложили никаких предложений, чтобы справиться с этим?

3. Обычно я оставляю его в том случае, если пользователь ввел, а затем добавляю ucwords … в противном случае, если кто-то введет аббревиатуру, вы выстрелите себе в ногу.

4. @Скотт: очевидно, что тонкое предложение — «Не делай этого!».

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

Ответ №2:

увидев, что он помечен PHP:
либо

string ucfirst ( string $str );

к заглавной первой букве первого слова

или

string ucwords ( string $str );

чтобы в верхнем регистре была первая буква каждого слова

вы можете использовать их в сочетании с

string strtolower ( string $str );

чтобы сначала нормализовать все имена в нижнем регистре.

Ответ №3:

Я не уверен, где и как вы хотите его отобразить, но если он находится на веб-странице, вы можете попробовать просто изменить отображение с помощью CSS. Попробуйте добавить:

 text-transform:capitalize;
 

к соответствующему правилу, как это:

 .name { text-transform:capitalize;}
 

если вы поместите имя в div или span с классом=»имя». Конечно, это никоим образом не изменит запись в базе данных, но мне было неясно, что предпочтительнее.

Комментарии:

1. Дагг, блестящее предложение, которое не влияет на фактические данные.

Ответ №4:

Пример из php.net:

 $bar = 'HELLO WORLD!';
$bar = ucfirst($bar);             // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
 

Однако имейте в виду примечания о местах…

Ответ №5:

Для простых имен это будет работать. Остерегайтесь особых случаев (таких как «Рональд Макдональд» в приведенном ниже примере).

В SQL Server:

 SELECT  --step 2: combine broken parts into a final name
  NAME_PARTS.FNAME_INITIAL   NAME_PARTS.REST_OF_FNAME AS FNAME
 ,NAME_PARTS.LNAME_INITIAL   NAME_PARTS.REST_OF_LNAME AS LNAME
FROM
  (     --step 1: break name into 1st letter and "everything else"
  SELECT
    UPPER(SUBSTRING(TEST.FNAME,1,1)) AS FNAME_INITIAL
   ,UPPER(SUBSTRING(TEST.LNAME,1,1)) AS LNAME_INITIAL
   ,LOWER(SUBSTRING(TEST.FNAME,2,LEN(TEST.FNAME))) AS REST_OF_FNAME
   ,LOWER(SUBSTRING(TEST.LNAME,2,LEN(TEST.LNAME))) AS REST_OF_LNAME
  FROM
    (   --step 0: generate some test data
          SELECT 'john' AS FNAME, 'doe' as LNAME
    UNION SELECT 'SUZY', 'SMITH'
    UNION SELECT 'bIlLy', 'BOb'
    UNION SELECT 'RoNALD', 'McDonald'
    UNION SELECT 'Edward', NULL
    UNION SELECT NULL, 'Jones'
    ) TEST
  ) NAME_PARTS
 

В Oracle

 SELECT  --step 2: combine broken parts into a final name
  NAME_PARTS.FNAME_INITIAL || NAME_PARTS.REST_OF_FNAME AS FNAME
 ,NAME_PARTS.LNAME_INITIAL || NAME_PARTS.REST_OF_LNAME AS LNAME
FROM
  (     --step 1: break name into 1st letter and "everything else"
  SELECT
    UPPER(SUBSTR(TEST.FNAME,1,1)) AS FNAME_INITIAL
   ,UPPER(SUBSTR(TEST.LNAME,1,1)) AS LNAME_INITIAL
   ,LOWER(SUBSTR(TEST.FNAME,2,LENGTH(TEST.FNAME))) AS REST_OF_FNAME
   ,LOWER(SUBSTR(TEST.LNAME,2,LENGTH(TEST.LNAME))) AS REST_OF_LNAME
  FROM
    (   --step 0: generate some test data
          SELECT 'john' AS FNAME, 'doe' as LNAME FROM DUAL
    UNION SELECT 'SUZY', 'SMITH' FROM DUAL
    UNION SELECT 'bIlLy', 'BOb' FROM DUAL
    UNION SELECT 'RoNALD', 'McDonald' FROM DUAL
    UNION SELECT 'Edward', NULL FROM DUAL
    UNION SELECT NULL, 'Jones' FROM DUAL
    ) TEST
  ) NAME_PARTS
 

Ответ №6:

Объединение функций сокращения PHP strtolower и ucwords решает вашу проблему:

 function ucname($f, $l)
{
    return ucwords(strtolower($f." ".$l));
}
echo ucname($fname, $lname);
 

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

  1. перед вставкой в ваше приложение
  2. во время вставки со строковыми функциями в SQL-запросе вставки/обновления
  3. во время извлечения с помощью строковых функций в запросе SQL select
  4. после извлечения, в вашем приложении

Ответ №7:

Измените имена на более низкие, а затем добавьте («A» — «a») к первой букве имени и имени.