2010-02-24 61 views
3

我使用PHP将表单条目插入MySQL数据库。有时用户输入全部大写字母。有什么方法可以改变它,只有首字母大写? ucwords(strtolower($word))不适合我,因为如果它没有被大写,我不想将第一个字母大写。PHP删除全部大写

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

+1

怎么样时,它应该是大写的例子,当它不应该是 – Jayrox 2010-02-24 05:05:30

回答

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 

正则表达式匹配仅是完全大写(任何数量的在每一侧一个字边界大写字母),然后通过每个这些所定义的函数,该函数返回一个替代文本仅与第一话字母大写。

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

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

否则,如果u想的使用只有第一个是大写字母,而不是字符串 的每个第一个字符都是大写,然后尝试ucfirst()函数。

+0

之前,我张贴布赖恩更新的问题和DAV回答了这个问题! – Vijay 2010-02-24 05:24:43

0

ucfirst(strtolower($word));

+1

你甚至读过这篇文章吗? – useless 2010-02-24 07:08:34