2010-02-24 84 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