当单词包含特殊字符时,将每个单词的首字母大写错误

时间:2017-03-06 06:20:33

标签: javascript regex

我正在使用这一行来大写每个单词的所有第一个字母

text.replace(/\b\w^\w/g, l => l.toUpperCase());

它成功地将普通单词大写,例如asif saeed - > Asif Saeed

但是在将"anna alàs i jové"这样的名称大写时,将其转换为"Anna AlàS I Jové" S不应该是à之后的首都。另外我们可以有一个解决方案,它忽略单个字母的单词。

3 个答案:

答案 0 :(得分:1)

将第一个字母表大写的最佳和最简单的方法是:

function toTitleCase(str)
{
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
console.log(toTitleCase("anna alàs i jové"));

编辑:

要包含以德语字符开头的单词,您可以使用:

function toTitleCase1(str)
   {
        return str.replace(/[\w\xc0-\xd6\xd8-\xf6\xf8-\xff]+/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
   }
console.log(toTitleCase1("ànna alàs i jové"));

答案 1 :(得分:0)

请试一试。



var text = "anna alàs i jové";
String.prototype.initCap = function() {
  return this.toLowerCase().replace(/(?:^|\s)[a-z]/g, function(m) {
    return m.toUpperCase();
  });
};
if (/^[a-zA-Z0-9- ]*$/.test(text) == false) {
  //Inint cap
  console.log(text.initCap());
  
  
  //Init cap if length >1
  var temp = text.split(" ");
  var t = "";
  temp.map(function(value){
    if(value.length > 1){
      t += value.initCap() + " ";
    }else{
      t += value + " ";
    }
  });
  console.log(t);
}




答案 2 :(得分:-1)

这将解决您的问题。 http://plnkr.co/edit/7ggKNRw7nwCLmPN0y4Az?p=preview

      return str.toLowerCase().replace(/\b(\w)/g, s => s.toUpperCase());