如何将第一个字母显示为大写?
Posted
技术标签:
【中文标题】如何将第一个字母显示为大写?【英文标题】:How do I display the first letter as uppercase? 【发布时间】:2010-09-16 00:11:17 【问题描述】:我的数据库中有 fname 和 lname,名称可以存储为 JOHN DOE 或 john DOE 或 JoHN dOE,但最终我想将其显示为 John Doe
fname 是 John,lname 是 Doe
【问题讨论】:
【参考方案1】:请注意,还有其他大写格式,例如 John McDoe、John D'Oe、John de O 和 John van den Doe。
【讨论】:
你也有变种,比如 John McDoe vs John MacDoe 了解不同的大写格式固然重要,但您没有提出任何应对建议? 我通常在用户输入的情况下保留它,然后添加 ucwords ...否则,如果有人输入首字母缩略词,你会在脚下开枪。 @Scott:显然,微妙的建议是“不要这样做!”。 我同意 Cory 的观点,试图将这种逻辑构建到软件中是不合理的,它甚至不是确定性的,因为两个姓氏中具有相同字符的人可能会以不同的方式大写。把它交给用户,并确保你坚持他们的大写偏好。【参考方案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 中,并带有 class="name"。当然,这不会以任何方式改变数据库条目,但我不清楚哪个更可取。
【讨论】:
Dugg,绝妙的建议,不会影响实际数据。【参考方案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
在甲骨文中
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);
另一方面,请记住,您可以在许多不同阶段进行这种数据美化:
-
插入之前,在您的应用程序中
在插入期间,在 SQL 插入/更新查询中使用字符串函数
在提取期间,在 SQL 选择查询中使用字符串函数
提取后,在您的应用程序中
【讨论】:
【参考方案7】:将名称更改为小写,然后在 fname & lname 的第一个字母上添加 ('A' - 'a')。
【讨论】:
以上是关于如何将第一个字母显示为大写?的主要内容,如果未能解决你的问题,请参考以下文章
C语言输入一个字符串,统计其中的单词个数,将第一个单词的首字母改为大写,并输出改写后的字符串
java 将第一个字母大写。链接:https://stackoverflow.com/questions/3419521/how-to-capitalize-the-first-letter-of-t