[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/normalize [Back]  [Original]

String.prototype.normalize() - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

String.prototype.normalize()

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since setembro de 2016.

O mtodo normalize() retorna a Forma de Normalizao Unicode (Unicode Normalization Form) de uma dada string (se o valor no uma string, ele ser convertido para uma primeiramente).

In this article

Sintaxe

str.normalize([form])

Parmetros

form

Opcional. Um dentre os seguintes valores: "NFC", "NFD", "NFKC", ou "NFKD", especificando o formato de normalizao. Se o valor for omitido ou for undefined, "NFC" ser utilizado.

  • NFC Formato de Normalizao Cannico de Composio.
  • NFD Formato de Normalizao Cannico de Decomposio.
  • NFKC Formato de Normalizao de Compatibilidade de Composio.
  • NFKD Formato de Normalizao de Compatibilidade de Decomposio.

Valor retornado

Uma string contendo a Forma de Normalizao Unicode da string dada.

Erros lanados

RangeError

Em erro RangeError lanado se form no for um dos valores especificados acima.

Descrio

O Unicode atribui um valor numrico exclusivo, denominado ponto de cdigo, a cada caractere. Por exemplo, o ponto de cdigo para "A" fornecido como U+0041. No entanto, s vezes mais de um ponto de cdigo, ou sequncia de pontos de cdigo, podem representar o mesmo caractere abstrato - o caractere "", por exemplo, pode ser representado por:

  • Apenas um ponto de cdigo U+00F1.
  • O ponto de cdigo para "n" (U+006E) seguido pelo ponto de cdigo para o til (U+0303).
js
let string1 = "\u00F1";
let string2 = "\u006E\u0303";

console.log(string1); //  retorna 
console.log(string2); //  retorna 

No entanto, como os pontos de cdigo so diferentes, a comparao de strings no os tratar como iguais. E como o nmero de pontos de cdigo em cada verso diferente, eles at mesmo possuem comprimentos diferentes.

js
let string1 = "\u00F1"; // 
let string2 = "\u006E\u0303"; // 

console.log(string1 === string2); // retorna false
console.log(string1.length); // retorna 1
console.log(string2.length); // retorna 2

O mtodo normalize() ajuda a resolver esse problema convertendo uma string em uma forma normalizada comum para todas as sequncias de pontos de cdigo que representam os mesmos caracteres. Existem duas principais formas de normalizao, uma baseada na equivalncia cannica e a outra baseada na compatibilidade.

Normalizao de equivalncia cannica

Em Unicode, duas sequncias de pontos de cdigo tm equivalncia cannica se representarem os mesmos caracteres abstratos e tiverem sempre a mesma aparncia visual e comportamento (por exemplo, eles devem sempre ser classificados da mesma maneira).

Voc pode usar o normalize() usando os argumentos "NFD" ou "NFC" para produzir uma forma de string que ser a mesma para todas as strings canonicamente equivalentes. No exemplo abaixo, normalizamos duas representaes do caractere "":

js
let string1 = "\u00F1"; // 
let string2 = "\u006E\u0303"; // 

string1 = string1.normalize("NFD");
string2 = string2.normalize("NFD");

console.log(string1 === string2); // retorna true
console.log(string1.length); // retorna 2
console.log(string2.length); // retorna 2

Formas compostas e decompostas

Observe que o comprimento da forma normalizada em "NFD" 2. Isso porque "NFD" fornece a verso decomposta da forma cannica, na qual pontos de cdigo nicos so divididos em vrios combinados. A forma cannica decomposta para "" "\u006E\u0303".

Voc pode especificar "NFC" para obter a forma cannica composta, na qual vrios pontos de cdigo so substitudos por pontos de cdigo nicos sempre que possvel. A forma cannica composta para "" "\u00F1":

js
let string1 = "\u00F1"; // 
let string2 = "\u006E\u0303"; // 

string1 = string1.normalize("NFC");
string2 = string2.normalize("NFC");

console.log(string1 === string2); // true
console.log(string1.length); // 1
console.log(string2.length); // 1
console.log(string2.codePointAt(0).toString(16)); // f1

Normalizao de compatibilidade

No Unicode, duas sequncias de pontos de cdigo so compatveis se representarem os mesmos caracteres abstratos e devem ser tratadas da mesma forma em algumas - mas no necessariamente em todas - aplicaes.

Todas as sequncias canonicamente equivalentes tambm so compatveis, mas no o contrrio.

Por exemplo:

  • o ponto de cdigo U+FB00 representa a ligadura "". compatvel com dois pontos de cdigo U+0066 consecutivos ("ff").
  • o ponto de cdigo U+24B9 representa o smbolo "". compatvel com o ponto de cdigo U+0044 ("D").

Em alguns aspectos (como classificao), eles devem ser tratados como equivalentes - e em alguns (como a aparncia visual) no devem, portanto, no so canonicamente equivalentes.

Voc pode usar o normalize() usando os argumentos "NFKD" ou "NFKC" para produzir uma forma de string que ser a mesma para todas as strings compatveis:

js
let string1 = "\uFB00";
let string2 = "\u0066\u0066";

console.log(string1); // 
console.log(string2); // ff
console.log(string1 === string2); // false
console.log(string1.length); // 1
console.log(string2.length); // 2

string1 = string1.normalize("NFKD");
string2 = string2.normalize("NFKD");

console.log(string1); // ff <- aparncia visual modificada
console.log(string2); // ff
console.log(string1 === string2); // true
console.log(string1.length); // 2
console.log(string2.length); // 2

Ao aplicar a normalizao de compatibilidade, importante considerar o que voc pretende fazer com as strings, uma vez que a forma normalizada pode no ser apropriada para as aplicaes. No exemplo acima, a normalizao apropriada para pesquisa, porque permite que um usurio encontre a string pesquisando por "f". Mas pode no ser apropriado para exibio, porque a representao visual diferente.

Como na normalizao cannica, voc pode solicitar formulrios compatveis decompostos ou compostos passando "NFKD" ou "NFKC", respectivamente.

Exemplos

Usando normalize()

js
// String Inicial

// U+1E9B: CARACTERE LATINO - LETRA S COMPRIDA COM PONTO ACIMA
// U+0323: COMBINANDO PONTO ABAIXO
var str = "\u1E9B\u0323";

// Formato de Normalizao Cannico de Composio (NFC)

// U+1E9B: CARACTERE LATINO - LETRA S COMPRIDA COM PONTO ACIMA
// U+0323: COMBINANDO PONTO ABAIXO
str.normalize("NFC"); // '\u1E9B\u0323'
str.normalize(); // igual  linha de cima

// Formato de Normalizao Cannico de Decomposio (NFD)

// U+017F: CARACTERE LATINO - LETRA S COMPRIDA
// U+0323: COMBINANDO PONTO ABAIXO
// U+0307: COMBINANDO PONTO ACIMA
str.normalize("NFD"); // '\u017F\u0323\u0307'

// Formato de Normalizao de Compatibilidade de Composio. (NFKC)

// U+1E69: CARACTERE LATINO - LETRA S COMPRIDA COM PONTO ACIMA E ABAIXO
str.normalize("NFKC"); // '\u1E69'

// Formato de Normalizao de Compatibilidade de Decomposio (NFKD)

// U+0073: CARACTERE LATINO - LETRA S COMPRIDA
// U+0323: COMBINANDO PONTO ABAIXO
// U+0307: COMBINANDO PONTO ACIMA
str.normalize("NFKD"); // '\u0073\u0323\u0307'

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-string.prototype.normalize

Compatibilidade com navegadores

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page