【问题标题】:Regex needed to capitalize names and have the rest be lowercase and properly handle names like McDonald正则表达式需要将名称大写,其余部分为小写,并正确处理麦当劳等名称
【发布时间】:2017-08-17 23:02:36
【问题描述】:

我有一个应用程序,用户可以在其中输入名字和姓氏。我们希望应用程序将输入的任何名称转换为全大写或全小写,或两者的混合,将首字母大写,其余小写。但是,如果名称中有空格、连字符或撇号,则它们后面的第一个字母要大写。

我有以下 java 脚本代码可以很好地处理上述问题:

name = name.replace(/\b\w+/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});

但是,此外,我们不希望将输入为“McIntire”或“MacDonald”、“LaToya”或“LeeAnn”的名称转换为“Mcintire”、“Macdonald”、“Latoya”或“ Latoya”或“Leeann”。对于这样的名称,上面的正则表达式并没有做我们想要的。我知道您无法处理名称中间合法混合大写和小写字母的所有情况,但通常将第三个或第四个字母在名称中大写。因此,我们希望 java 脚本或正则表达式不将第三或第四位的大写字母更改为小写字母,同时仍按照上述正则表达式和函数转换其余部分。我意识到这将允许人们像 JoHn 或 WilLiam 那样混合大小写并让它保持这种状态,但是,我们无法处理用户可能做的所有愚蠢的事情,我们必须接受这样的事情。如果我们能够处理第三个或第四个字母大写的非常常见的情况,那就足够了。

因此,总而言之,如果有人可以提供 java 脚本来执行我上面的语句所做的事情,并且不将用户输入的第三个或第四个字母作为大写字母更改为小写,我将不胜感激。

【问题讨论】:

  • 您发布了不应转换的示例性单词。贴出应该转换的词
  • 在你开始弄乱别人的名字之前,你应该阅读“Falsehoods Programmers Believe About Names”——另外,我认识一个姓 “Dell'Erba” 的人,你的“第三个或第四”规则将失败。

标签: javascript regex string


【解决方案1】:

如果您只想不触摸第 3 和第 4 个字符,则使用您提供的内容:

name = name.replace(/\b\w+/g, function(txt){
  return txt.charAt(0).toUpperCase() + txt.charAt(1).toLowerCase() +
  txt.substr(2,2) + txt.substr(4).toLowerCase();});

也就是说,使第一个字母大写,第二个小写,第三个和第四个不变,从第 5 个开始,小写。

我希望这会有所帮助!

【讨论】:

  • 谢谢。就是这么简单又好听,不知道为什么没想到!
  • 没问题,是的,有时我们会遇到简单的好答案。如果对您有用,请接受答案。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2012-07-16
  • 2022-08-16
  • 1970-01-01
  • 2019-04-01
  • 2016-04-30
  • 1970-01-01
相关资源
最近更新 更多