String.prototype.normalize() - form形式で正規化する
String.prototype.normalize()は、文字列(Unicode)を正規化するメソッドです。例えば、平仮名の「か(\u304b)」と濁点の「゛(\u3099)」、2つのUnicodeが並んだ場合、一見、1つの文字の「が(\u304c)」として見えますが、実際は1つの文字ではありません。そういったUnicodeを、例えば1つの「が(\u304c)」に統一することでデータを統一するのが、このメソッドの役割です。
概要
説明
String.prototype.normalize ( [ form ] )
引数(form)には、正規化の形式を指定する。配列で
- NFC
- 正準等価性により分解、合成される。「か」と「゛」を「が」にする。
- NFD
- 正準等価性により分解される。「が」を「か」と「゛」にする。
- NFKC
- 互換等価性によって分解、合成される。NFCに加えて、「半角カナ→全角カナ」「全角数字→半角数字」など、互換等価が行なわれる。
- NFKD
- 互換等価性によって分解される。NFDに加えて、「半角カナ→全角カナ」「全角数字→半角数字」など、互換等価が行なわれる。
チュートリアル
下記にいくつかの例を示します。
// NFC
var string = "\u304b\u3099" ;
var result = string.normalize( "NFC" ) ; // 正準等価により、\u304b\u3099 → \u304c
// NFD
var string = "\u304c" ;
var result = string.normalize( "NFD" ) ; // 正準等価により、\u304c → \u304b\u3099
// NFKC
var string = "\u304b\u3099123" ;
var result = string.normalize( "NFKC" ) ; // \u304c123
// 正準等価により、\u304b\u3099 → \u304c
// 互換等価により、123 → 123
// NFKD
var string = "\u304c123" ;
var result = string.normalize( "NFKD" ) ; // \u304b\u3099123
// 正準等価により、\u304c → \u304b\u3099
// 互換等価により、123 → 123
デモ
String.prototype.normalize()のデモです。それぞれ、正規化前と正規化後でUnicodeが変換されているのを確認しましょう。
<!-- このコードは編集できます。 -->
<!DOCTYPE html>
<html>
<head>
<style>
body {
white-space: pre-wrap ;
}
</style>
</head>
<body>
<script>
/** try it! **/
var a = escape( "\u304b\u3099" ) ;
var b = escape( "\u304b\u3099".normalize( "NFC" ) ) ;
var c = escape( "\u304c" ) ;
var d = escape( "\u304c".normalize( "NFD" ) ) ;
var e = escape( "\u304b\u3099123" ) ;
var f = escape( "\u304b\u3099123".normalize( "NFKC" ) ) ;
var g = escape( "\u304c123" ) ;
var h = escape( "\u304c123".normalize( "NFKD" ) ) ;
/** try it! **/
var results = { a:a, b:b, c:c, d:d, e:e, f:f, g:g, h:h, } ;
for( var name in results ) {
console.log( name, results[name] ) ;
document.body.appendChild( new Text( name + " = " + JSON.stringify( results[name] ) + "\n" + ( ["b","d","f","h"].indexOf(name)>-1 ? "\n" : "" ) ) ) ;
}
</script>
</body>
</html>
サポート状況
Chrome | Firefox | Safari | Edge | IE | Opera | iOS Safari | Android |
---|---|---|---|---|---|---|---|
● 34+ | ● 31+ | ● 10+ | ● | × | ● 21+ | ● 10.0+ | × |
関連記事
- String.prototype.localeCompare()
- String.prototype.localeCompare()は、元の文字と引数の文字の、並び順の優劣を比較するメソッドです。並び順の決定はローカル環境の言語情報に従って決定されます。
- Embed
- Google Maps Embed APIの使い方を、初心者にも分かるようにまとめてあります。
- 指定文字を置換、削除する
- 文字列の中の指定した部分を置換したり削除します。
- String.prototype.replace()
- String.prototype.replace()は、文字列を置換するメソッドです。置換前の文字は文字列、または正規表現(RegExp)で指定できます。