2015-08-17 21 views
1

我想修改一個現有的JavaScript函數,通過將第一個字母的第一個字母設置爲大寫,正確地格式化用戶名,以及最後一個名字名稱。大寫的情況下,當有一個短劃線之間的姓氏

但是也有一些連字符,當這些發生的時候,看起來就像雨果Bearsotti-potz,而實際上它應該是雨果Bearsotti-Potz一些姓氏

我想尋求幫助,以修改該功能所以如果可能的話,它允許適當的情況下使用連字符連字符。

下面是現有的代碼(相關片段只):

 if (input) { 
      var out = ''; 
      input.split(delimiter || ' ').forEach(function (sector) { 
       var x = sector.toLowerCase(); 
       out += x.charAt(0).toUpperCase() + x.substr(1) + ' '; 
      }); 
      if (out.length > 0) { 
       out = out.substring(0, out.length - 1); 
      } 
      return out; 
     } 

非常感謝。

回答

1

你也可以創建一個功能用於在任何給定分隔符後大寫第一個字符。雖然不像正則表達式解決方案那麼簡潔。

function capitalizeAfter(input, delimiter) { 
    var output = '', 
     pieces = input.split(delimiter); 

    pieces.forEach(function(section, index) { 
    // capitalize the first character and add the remaining section back 
    output += section[0].toUpperCase() + section.substr(1); 

    // add the delimiter back if it isn't the last section 
    if (index !== pieces.length - 1) { 
     output += delimiter; 
    } 
    } 
    return output; 
} 

然後,它會被用於像這樣:

if (input) { 
    return capitalizeAfter(capitalizeAfter(input.toLowerCase(), ' '), '-'); 
} 
+0

這是一個很好的例子。謝謝csbarnes :) –

2

這應該滿足你的測試條件設置:http://plnkr.co/edit/9welW6?p=preview

HTML:

<input type="text" ng-model="foo"> 
<br> 
{{foo | nameCaps}} 

JS:

app.filter('nameCaps',function(){ 
    return function(input) { 
    if (!input) return; 
    return input.toString().replace(/\b([a-z])/g, function(ch) { 
     return ch.toUpperCase(); 
    }); 
    }; 
}); 

雖然我警惕,作出關於人的名字假設http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

+0

'\ B'是 「字邊界」 選擇器。非常方便http://www.regular-expressions.info/wordboundaries.html – wesww

相關問題