【问题标题】:How to correct capitalize words containing ä,ö,ü?如何纠正包含ä,ö,ü的单词大写?
【发布时间】:2016-07-17 18:52:15
【问题描述】:

我有一个多行文本字段,用户可以在其中输入例如“märzmärz”。 现在我想把这两个词都改成“März März”。

我试过这段代码(在自定义按键脚本中):

var z=event.value.replace(/[\w\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff]+/igm, function(m){ return m.toLowerCase();});
var x=z.toLowerCase();
var y = x.replace(/\b./igm, function(m){ return m.toUpperCase();});
event.value = y;

结果是:“MäRz MäRz”

如何编辑脚本,结果是:“März März”?

【问题讨论】:

  • 对你来说词是什么?有什么可以用空格区分的吗?
  • @Bergi 是的,没错。但它认为我必须编辑我的问题,因为我的文本字段是多行的。
  • 那你为什么不简单地匹配/(^|\s+)\S/g.toUpperCase()呢?
  • @Bergi 效果很好。谢谢。

标签: javascript multiline acrobat


【解决方案1】:

这里你不需要正则表达式,如果它总是第一个字母:

var start =  "märz märz";

var text = start.split(' ').map(function(el) {
  return el.slice(0, 1).toUpperCase() + el.slice(1);
}).join(' ');


console.log(text); // "März März"

JSBin:

https://jsbin.com/sohamo/edit?js,console

【讨论】:

  • 如果不总是只有空格,则需要正则表达式:-)
【解决方案2】:

根据bergi的提示,代码必须编辑成这样:

event.value = event.value.replace(/(^|\s+)\S/g, function(m){ return m.toUpperCase();});

该代码完全符合我的要求。

每行中的每个单词都大写。

谢谢。

【讨论】:

  • 更紧凑的箭头功能:event.value = event.value.replace(/(^|\s+)\S/g, m => m.toUpperCase())
【解决方案3】:

这个呢:

var a = "märz märz, april mai oktober\nnovember februar\naugust";

function capitalize(string) {
  var b = string.split(" ");
  b.forEach(function(e, i, a) {
    a[i] = e[0].toUpperCase() + e.slice(1);
    if (a[i].indexOf("\n") > 0) {
      a[i] = e[a[i].indexOf("\n") + 1].toUpperCase() + a[i].slice(a[i].indexOf("\n") + 2);
    }
  });
  return b.join(" ");
}

document.write(capitalize(a));

【讨论】:

  • 嗨,几乎是正确的,因为新行的第一个单词没有改变并且保持小写。如果能解决就太好了。
  • 好的,我已经更新了功能。现在也可以识别新行。
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 2015-04-30
  • 2012-06-28
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多