我使用PHP将表单条目插入MySQL数据库。有时用户输入所有大写字母。有没有办法改变它,只有第一个字母大写? ucwords(strtolower($word))
对我不起作用,因为如果第一个字母尚未大写,我不想将首字母大写。
我主要担心的是人们提交他们的姓氏。大多数人都正确地提交了它,但有些人提交它作为全部大写。如果全部大写,它应该与ucwords(strtolower($word))
相同,但如果有人提交他们的名字为De la Rosa,我不希望它改为De La Rosa。
答案 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));