2013-05-15 166 views
1

我有一個表單,其中包含一些文本輸入以插入First NameLast Name,但我想將每個單詞的第一個字母改爲大寫,我發現這個解決方案:Javascript/jQuery大寫變音字母的第一個字母

// The textboxes with this class are modified 
$(".toUpper").change(function() { 
     var str = $(this).val(); 
     str = str.toLowerCase().replace(/\b[a-z]/g, function (letter) { 
      return letter.toUpperCase(); 

     }); 
     $(this).val(str); 
    }); 

它工作,("hEllO"=>"Hello", "whAts uP" =>"Whats Up")

當我嘗試將其應用到重音單詞出現的問題,例如:

"gonzález" = "GonzáLez", 
"pérez" = "PéRez" 

重音單詞之後有再次大寫字母。

如何修改正則表達式以避免此問題?

希望你能幫助我! :)

+0

可能重複問題http://stackoverflow.com/questions/196972/convert-string-to- title-case-with-javascript/196991#196991? – gillyspy

+0

@gillyspy:不支持非拉丁字符。 – Blender

回答

3

\b是一個非單詞邊界(即\b將使邊界的任何不屬於任何[0-9a-zA-Z_] 1的任何字符)

因此,那些重音字成爲你的字邊界..

而是使用這個表達式

/(^|\s)[a-z\u00E0-\u00FC]/g 
+0

嗨我試過這在Chrome的Javascript控制檯,它說:SyntaxError:意外的令牌^ –

+0

@ Cesar_K-rrillo檢查新的編輯 – Anirudha

+0

@Anirudh:你仍然會有同樣的問題。 '[a-z]'不匹配重音字符,所以'él'不會被大寫。 – Blender

2

[a-z]不匹配é。你必須要有點更寬鬆:

"gonzález foo bar, baz él".replace(/(^|\s)\S/g, function(match) { 
    return match.toUpperCase(); 
}); 

和輸出:

"González Foo Bar, Baz Él" 
+0

我建議改進,所以它可以處理像「stRING」這樣的字符串:「gonzálezfoo bar,bazél」.toLowerCase()。replace(...) – ceruleus

相關問題