0

我有一个表格,当用户输入他们的名字时,它会自动将每个字符的第一个字符大写,但是当用户的名字中有一个特殊字符(例如“è”)时,然后代码会在其后的下一个字符大写。

例如:

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();});
}
4

2 回答 2

3

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

capFirstLetters= function(str){
    return  str.toLowerCase().replace(/(^|\s)[\S]/g, function(letter) {
        return letter.toUpperCase();
    });
}

此版本的正则表达式将匹配一个空白字符或字符串的开头,后跟一个非空白字符。

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

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

于 2012-09-04T12:04:13.473 回答
0

在你的正则表达式中使用单词边界,例如'\b':

http://www.regular-expressions.info/wordboundaries.html

于 2012-09-04T11:59:07.367 回答