3

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

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

4

3 回答 3

6
<?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])。

于 2010-02-24T05:16:36.730 回答
0

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

但是你的确切要求是什么..

下面以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() 函数。

于 2010-02-24T05:23:09.557 回答
0

ucfirst(strtolower($word));

于 2010-02-24T06:08:54.663 回答