正则表达式需要将名称大写,其余部分为小写,并正确处理麦当劳等名称

时间:2017-03-24 21:05:20

标签: javascript regex string

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

我有以下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脚本来执行我上面的声明,加上不将用户输入的第三或第四个字母更改为大写字母,我将不胜感激。

1 个答案:

答案 0 :(得分: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个开始,使下套。

我希望这有帮助!