0

ユーザーが名前を入力すると、それぞれの最初の文字が自動的に大文字になるフォームがありますが、ユーザーの名前に「è」などの特殊文字が含まれていると、コードが先行して次の文字を大文字にします。

例えば:

Joesph Bloggs は正常に動作しますが、Joesph Bloggs と入力すると、実際には Joesph 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();
    });
}

このバージョンの正規表現は、空白文字または文字列の先頭に一致し、その後に空白以外の文字が続きます。

また、中国語や日本語の文字を含むような非拡張ラテン語の名前を使用した場合、ここでの動作がどうなるかはわかりません。また、右から左に読む言語 (ヘブライ語など) では正しく機能しない可能性があります。

この種のことを正しく理解するのは難しく、姓と名に 2 つの別々のフィールドを使用するか、ユーザー入力をそのままにしておく方が理にかなっている場合があります。

于 2012-09-04T12:04:13.473 に答える
0

'\b' のように、正規表現で単語境界を使用します。

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

于 2012-09-04T11:59:07.367 に答える