PHP删除全部大写

时间:2010-02-24 05:03:08

标签: php

我使用PHP将表单条目插入MySQL数据库。有时用户输入所有大写字母。有没有办法改变它,只有第一个字母大写? ucwords(strtolower($word))对我不起作用,因为如果第一个字母尚未大写,我不想将首字母大写。

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

3 个答案:

答案 0 :(得分:4)

<?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

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

如果您还要阻止UPPERCA $ E之类的内容,则可以在正则表达式中添加其他符号,甚至只匹配所有非小写字符(使用[^a-z]代替[A-Z])。< / p>

答案 1 :(得分: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()函数。

答案 2 :(得分:0)

ucfirst(strtolower($word));