2011-09-19 158 views
15

我想使用JavaScript函數來大寫每個單詞的第一個字母大寫每個單詞的第一個字母

如:

THIS IS A TEST ---> This Is A Test 
this is a TEST ---> This Is A Test 
this is a test ---> This Is A Test 

這將是一個簡單的JavaScript函數

+0

http://stackoverflow.com/questions/1026069/capitalize-the-first-letter- string-in-javascript –

+0

轉向小寫形式,通過將空白分割成單個單詞,在每個單詞的第一個字符上將toUpperCase()分割。 – bdares

+2

@ reader_1000:這個問題是關於大寫的字符串的第一個字符,雖然這是關於uoppercasing每個單詞的第一個字符(這是更復雜的方式,需要一個不同的解決方案) – oezi

回答

1

起飛看看ucwords from php.js - 這似乎是你要找的東西。基本上,它是:

function ucwords (str) { 
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) { 
     return $1.toUpperCase(); 
    }); 
} 

注意THIS IS A TEST返回THIS IS A TEST所以你必須使用這樣的:

var oldstring = "THIS IS A TEST"; 
var newstring = ucwords(oldstring.toLowerCase()); 

或修改功能的位:

function ucwords (str) { 
    str = (str + '').toLowerCase(); 
    return str.replace(/^([a-z])|\s+([a-z])/g, function ($1) { 
     return $1.toUpperCase(); 
    }); 
} 
var oldstring = "THIS IS A TEST"; 
var newstring = ucwords(oldstring); // This Is A Test 
+0

這對於非ASCII字母不起作用。 – Joey

5
"tHiS iS a tESt".replace(/[^\s]+/g, function(str){ 
    return str.substr(0,1).toUpperCase()+str.substr(1).toLowerCase(); 
    }); 

其他變體:

"tHiS iS a tESt".replace(/(\S)(\S*)/g, function($0,$1,$2){ 
    return $1.toUpperCase()+$2.toLowerCase(); 
    }); 
8
function capitalizeEachWord(str) 
{ 
    var words = str.split(" "); 
    var arr = []; 
    for (i in words) 
    { 
     temp = words[i].toLowerCase(); 
     temp = temp.charAt(0).toUpperCase() + temp.substring(1); 
     arr.push(temp); 
    } 
    return arr.join(" "); 
} 
+0

這也適用,如果第一個字母重音 – coorasse

33

這裏有一個小一個襯墊,我使用來完成這項工作

var str = 'this is an example'; 
str.replace(/\b./g, function(m){ return m.toUpperCase(); }); 

但約翰Resig的這樣做處理很多情況下,一個相當真棒腳本 http://ejohn.org/blog/title-capitalization-in-javascript/

更新

ES6 +回答:

str.split(' ').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ');

這可能是一種比這更好的方法。它將處理重音字符。

+4

我愛這個簡單和簡潔。 –

+0

非常好的代碼。簡單而高效。 – user3658423

+1

如果第一個字母有重音 – coorasse

1

這將利用每一個字由空格或破折號

function capitalize(str){ 
    str = str.toLowerCase(); 
    return str.replace(/([^ -])([^ -]*)/gi,function(v,v1,v2){ return v1.toUpperCase()+v2; }); 
} 

實例分隔:

  • 我愛桔子=>我愛橙子
  • 一個奇怪的語法=>甲奇怪的外觀語法

etc

4

這是一個簡單的解決方案,將句子分解爲一個數組,然後循環遍歷數組,創建一個大寫字母的新數組。

function capitalize(str){ 

    var strArr = str.split(" "); 
    var newArr = []; 

    for(var i = 0 ; i < strArr.length ; i++){ 

    var FirstLetter = strArr[i].charAt(0).toUpperCase(); 
    var restOfWord = strArr[i].slice(1); 

    newArr[i] = FirstLetter + restOfWord; 

    } 

    return newArr.join(' '); 

} 
+0

+1以提高可讀性 – iamwhitebox

1

如果你不介意使用一個庫,你可以使用Sugar.jscapitalize()

資本(全部= FALSE)大寫的 字符串的第一個字符和downcases所有其他字母。如果全部爲真,則 中的所有單詞都將被大寫。

例子:

'hello kitty'.capitalize()  -> 'Hello kitty' 
'hello kitty'.capitalize(true) -> 'Hello Kitty' 
1

你也可以使用過濾器使用下面的方法:

function Ucwords(str){ 
    var words = str.split(' '); 
    var arr = []; 
    words.filter(function(val){ 
     arr.push(val.charAt(0).toUpperCase()+ val.substr(1).toLowerCase());    
    }) 
    console.log(arr.join(" ").trim()); 
    return arr.join(" ").trim(); 
} 

Ucwords("THIS IS A TEST") //This Is A Test 

Ucwords("THIS ") //This 
相關問題