【问题标题】:Make first letter of each word/name uppercase, unless a known all-lowercase component of a surname [duplicate]将每个单词/名称的第一个字母大写,除非姓氏的已知全小写部分[重复]
【发布时间】:2011-01-20 09:29:12
【问题描述】:

我使用 PHP 将表单条目插入 MySQL 数据库。有时用户输入全部大写的文本。有什么办法可以改变它,使只有第一个字母大写? ucwords(strtolower($word)) 对我不起作用,因为如果第一个字母还没有大写,我不想大写它。

我主要关心的是人们何时提交他们的姓氏。大多数人正确提交,但有些人以全部大写形式提交。如果全部大写,它应该和ucwords(strtolower($word)) 一样工作,但是如果有人提交他们的名字为De la Rosa,我不希望它更改为De La Rosa

【问题讨论】:

  • 什么时候应该大写和什么时候不应该的例子怎么样

标签: php string title-case humanize


【解决方案1】:
<?php

function ucwordsreplace($matches) {
    return ucwords(strtolower($matches[0]));
}

$original = "some UPPERCASE words GO HERE";
$fixed = preg_replace_callback('/\b[A-Z]+\b/', "ucwordsreplace", $original);

echo $fixed; // some Uppercase words Go Here

正则表达式只匹配完全大写的单词(任意数量的大写字母,每边都有一个单词边界),然后将每个单词传递给定义的函数,该函数返回一个替换文本,只有第一个字母大写。

如果您还想阻止像 UPPERCA$E 这样的事情,那么您可以在正则表达式中添加其他符号,或者甚至只匹配所有非小写字符(使用 [^a-z] 而不是 [A-Z])。

【讨论】:

    【解决方案2】:

    我认为你表示的功能是正确的..

    但是你的具体要求是什么..

    下面以ucwords的用法为例

    <?php
    $foo = 'hello world!';
    $foo = ucwords($foo);             // Hello World! 
    
    $bar = 'HELLO WORLD!';
    $bar = ucwords($bar);             // HELLO WORLD!
    $bar = ucwords(strtolower($bar)); // Hello World!
    ?> 
    

    如果你只希望第一个是大写而不是字符串的每个第一个字符 要大写,然后尝试 ucfirst() 函数。

    【讨论】:

      【解决方案3】:

      ucfirst(strtolower($word));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 2014-04-11
        • 2014-08-21
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多