2008-10-08 16 views

Respuesta

14

ver que se etiqueta PHP:
ya sea

string ucfirst (string $str );

a mayúscula la primera letra de la primera palabra

o

string ucwords (string $str );

a mayúscula la primera letra de cada palabra

es posible que desee utilizar en combinación con los

string strtolower (string $str );

para normalizar todos los nombres en minúsculas primero.

-1

Cambie los nombres para bajar y luego agregue ('A' - 'a') a la primera letra de fname & lname.

13

No estoy seguro de dónde y cómo desea mostrarlo, pero si está en una página web puede intentar simplemente modificar la pantalla mediante CSS. Trate de añadir:

text-transform:capitalize; 

a la norma pertinente, así:

.name { text-transform:capitalize;} 

si se pone el nombre en un div o vano con class = "nombre". Por supuesto, esto no alterará en modo alguno la entrada de la base de datos, pero no estaba claro cuál era preferible.

+0

Dugg, sugerencia brillante que no afecta a los datos reales. – questzen

21

Tenga en cuenta que hay otros formatos de capitalización, como John McDoe, John D'Oe, John de O y John van den Doe.

+2

También N'Gomo Doe. – DJClayworth

+0

¡Esa es una buena idea! – harriyott

+0

¡Oooh! Y John-Joe Doe – harriyott

3

Un ejemplo de php.net:

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

tener en cuenta las notas sobre los lugares aunque ...

1

Para los nombres simples, esto va a funcionar. Tenga cuidado con los casos especiales (como "Ronald McDonald" en el siguiente ejemplo).

En 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 

En 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 
1

Combinando las funciones de la taquigrafía PHP strtolower y ucwords resuelve su problema:

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

En una nota lateral, tenga en cuenta que puede hacer ese tipo de embellecimiento de datos en muchas etapas diferentes:

  1. antes de la inserción, en su aplicación
  2. durante la inserción, con funciones de cadena en el SQL de inserción/actualización consulta
  3. durante la extracción, con funciones de cadena en la consulta de selección SQL
  4. después de la extracción, en su aplicación
Cuestiones relacionadas