Как отобразить первую букву в верхнем регистре? - PullRequest
6 голосов
/ 08 октября 2008

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

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

Ответы [ 7 ]

21 голосов
/ 08 октября 2008

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

14 голосов
/ 08 октября 2008

видя это с тегом PHP:
либо

string ucfirst ( string $str );

в верхний регистр первой буквы первого слова

или

string ucwords ( string $str );

заглавными буквами первой буквы каждого слова

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

string strtolower ( string $str );

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

13 голосов
/ 08 октября 2008

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

text-transform:capitalize;

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

.name { text-transform:capitalize;}

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

3 голосов
/ 08 октября 2008

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

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

Имейте в виду заметки о локалях, хотя ...

1 голос
/ 08 октября 2008

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

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

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

  1. перед вставкой, в вашем приложении
  2. во время вставки со строковыми функциями в запросе вставки / обновления SQL
  3. во время извлечения со строковыми функциями в запросе выбора SQL
  4. после извлечения, в вашей заявке
1 голос
/ 08 октября 2008

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

В 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
0 голосов
/ 08 октября 2008

Измените имена на более низкие, а затем добавьте ('A' - 'a') к первой букве fname & lname.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...