【问题标题】:Convert first letter to uppercase in word containing diacritics将包含变音符号的单词中的第一个字母转换为大写
【发布时间】:2022-01-14 08:59:36
【问题描述】:

我有这个代码,其中 first-name last-name 的输入将转换为小写,然后每个单词的第一个字母将转换为大写,然后交换位置。

但是,我遇到了一个不便,特殊字符(不确定该术语)没有被处理。

输入:oNdřej rasZka 期望输出:Raszka,Ondřej 我得到了什么:OndŘEj Raszka

OndŘEj 的“ŘE”没有与其他可用的特殊字符一样正确处理,有什么办法解决这个问题吗?

<div>
  <textarea cols="50" rows="5" id="fullName" class= ""></textarea>
</div>

<button id="splitName">Click</button>
<div>
  <br>
</div>
<div class= "border" id="result"></div>

var splitName = document.getElementById("splitName");

splitName.onclick = function() {
  document.getElementById("result").innerHTML = '';

        var value = document.getElementById("fullName").value;
  
  
  //CASE CONVERT//
            var value2 = value.toLowerCase();
            value2 = value2.replace(/\b./g, function(m){ return m.toUpperCase(); });

        

    value2.split('\n').forEach(fullname => {
    var spaceIndex = fullname.indexOf(" ");
    var firstname;
    var lastname;
    if (spaceIndex == -1) {
      lastname = fullname;
      lastname = "";
    } else {
      firstname = fullname.substring(0, spaceIndex);
      lastname = fullname.substr(spaceIndex + 1);       
    }

        document.getElementById("result").innerHTML += lastname + " " + firstname+ "<br>";
             


  });
};

非常感谢。

【问题讨论】:

  • @SaiKiranKrishnaMurthy 看起来@Ced 试图将多个单词大写,因为它们的变量称为fullName。答案非常相似,但可能略有不同
  • \b. 匹配特殊字符,replace 函数将它们返回为大写。使用/^.|\s./g 匹配空格分隔的单词中的第一个字符。如果可以使用另一个单词分隔符,事情会变得更加棘手。

标签: javascript html


【解决方案1】:

您可以切掉第一个字符,对其调用 toUpperCase,然后将其连接回字符串的其余部分。

function capitalise(input) {
  return `${input[0].toUpperCase()}${input.slice(1).toLowerCase()}`
}

此方法可避免您将所有内容都转换为小写,然后必须将第一个字符切换回来。我怀疑您的正则表达式是导致问题的原因,因为它可能会读取不存在的字符。

或者,如果您想将每个名称大写并且知道分隔符,您可以执行以下操作:

function capitalise(input, separator) {
  const wordArray = input.split(separator);
  const output = wordArray.map(word => `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`);

  return output.join(separator);
}

【讨论】:

  • 这就是 OP 正在做的事情:.replace(/\b./g, function(m){ return m.toUpperCase(); });
  • @Andreas 这是相同的方法,但不使用(我怀疑)导致误报匹配的正则表达式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多