javascript将html实体条目发布后的下一个字母大写

javascript将html实体条目发布后的下一个字母大写,javascript,Javascript,我有一个表单,当用户输入他们的名字时,它会自动将每个名字的第一个字符大写,但是当用户的名字中有一个特殊字符,比如“è”时,代码就会在前面大写后面的下一个字符 例如: Joesph Bloggs工作得很好,但如果我输入Joèsph Bloggs,它实际上会作为Joèsph Bloggs输出 注意在名称中间的首都S。我目前使用的代码如下,有什么办法可以防止这种情况发生吗 谢谢 capFirstLetters= function(str){ return str.toLowerCase(

我有一个表单,当用户输入他们的名字时,它会自动将每个名字的第一个字符大写,但是当用户的名字中有一个特殊字符,比如“è”时,代码就会在前面大写后面的下一个字符

例如:

Joesph Bloggs工作得很好,但如果我输入Joèsph Bloggs,它实际上会作为Joèsph Bloggs输出

注意在名称中间的首都S。我目前使用的代码如下,有什么办法可以防止这种情况发生吗

谢谢

  capFirstLetters= function(str){
    return  str.toLowerCase().replace(/\b[a-z]/g, function(letter) {return letter.toUpperCase();});
}

在regexp中使用单词boundary,例如“\b”:


在regexp中使用单词boundary,例如“\b”:


遗憾的是,这是因为JS正则表达式不支持unicode。一个稍微好一点的方法可能是:

capFirstLetters= function(str){
    return  str.toLowerCase().replace(/(^|\s)[\S]/g, function(letter) {
        return letter.toUpperCase();
    });
}
这个版本的正则表达式将匹配一个空白字符或字符串的开头,后跟一个非空白字符

还要注意的是,我不知道如果人们使用非扩展拉丁名称,比如那些涉及中文或日语字符的名称,这里的行为会是什么。对于从右向左阅读的语言(如希伯来语),它也不可能正常工作


这类事情很难做到正确,使用两个单独的字段作为名字和姓氏可能更有意义,或者干脆让用户输入保持原样。

遗憾的是,这是因为JS正则表达式不支持unicode。一个稍微好一点的方法可能是:

capFirstLetters= function(str){
    return  str.toLowerCase().replace(/(^|\s)[\S]/g, function(letter) {
        return letter.toUpperCase();
    });
}
这个版本的正则表达式将匹配一个空白字符或字符串的开头,后跟一个非空白字符

还要注意的是,我不知道如果人们使用非扩展拉丁名称,比如那些涉及中文或日语字符的名称,这里的行为会是什么。对于从右向左阅读的语言(如希伯来语),它也不可能正常工作

这类事情很难做到正确,使用两个单独的字段作为名字和姓氏可能更有意义——或者简单地保持用户输入的原样