¿Cómo funciona la división de JavaScript en cadenas de números en árabe e inglés?
arabic (4)
Cuando intenté dividir:
"بحد-8635".split(''-'')
entonces JavaScript me da este resultado:
[0] - بحد,
[1] - 8635
console.log("بحد-8635".split(''-''))
Y cuando intenté dividirme:
"2132-سسس".split(''-'')
me da este resultado diferente:
[0] - 2132
[1] - سسس
console.log("2132-سسس".split(''-''))
¿Cómo está pasando esto? ¿Cómo se puede implementar esto correctamente?
Depende de cómo escriba la cadena (de izquierda a derecha / de derecha a izquierda). En la pregunta proporcionada, "2132-سسس" se escribió de izquierda a derecha y "8635-بحد" se escribió de derecha a izquierda.
Verifique el fragmento a continuación.
console.log("Typed left to right:");
console.log("2132-سسس".split(''-''));
console.log("8635-بحد".split(''-''));
console.log("---------------");
console.log("Typed right to left as Arabians follow:");
console.log("سسس-2132".split(''-''));
console.log("بحد-8635".split(''-''));
En lugar de tratar la dirección del texto como un problema que debe controlarse en la capa de marcado o formato, Unicode requiere que se procese en el nivel del conjunto de caracteres. En ausencia de caracteres de formato que fuercen la dirección del texto, ciertos caracteres (como las letras del alfabeto latino) se muestran de izquierda a derecha, algunos (como las letras árabes o hebreas) se muestran de derecha a izquierda y otros (como los signos de puntuación) puede mostrarse de formas que dependen de caracteres anteriores, y algunos (como dígitos) pueden mostrarse de izquierda a derecha como un grupo, pero los grupos se muestran de acuerdo con la dirección del texto anterior.
Si las letras mayúsculas en el texto (caracteres especificados en orden, de izquierda a derecha)
abc123 456XYZdef
estuvieran en un alfabeto de derecha a izquierda, el texto se mostraría como
abc123 456ZYXdef
, con los caracteres de derecha a izquierda mostrados en la derecha -a la izquierda orden.
Si el orden de los caracteres hubiera sido (de nuevo, lectura estrictamente de izquierda a derecha)
abcXYZ456 123def
, se mostraría como
abc123 456ZYXdef
porque los dos grupos de números se mostrarían en orden de derecha a izquierda, a la izquierda del texto anterior de derecha a izquierda, aunque los números dentro de cada grupo se leerían de izquierda a derecha.
Como consecuencia de estas reglas, es imposible saber el orden de los caracteres en una cadena con solo mirarla. La única forma de saber realmente qué está pasando es transliterar los personajes en formas como sus representaciones hexadecimales que tienen un orden consistente.
Esto depende de cómo se escriba su cadena (
ltr or rtl
).
Para comprender la diferencia, establezca el atributo
dir
en la entrada y luego divida el valor:
function handleLTR() {
let element = document.getElementById(''default'').value
console.log(element.split(''-''))
}
function handleRTL() {
let element = document.getElementById(''rtl'').value
console.log(element.split(''-''))
}
<div>
<input id=''default'' value=''''></input>
<button onClick=handleLTR()>Handle LTR</button>
</div>
<div>
<input id=''rtl'' dir="rtl" value=''''></input>
<button onClick=handleRTL()>Handle RTL</button>
</div>
Para obtener más información, lea sobre la diferencia entre RTL y LTR .
Prueba esto
console.log("2132-سسس".split(''-'').sort());
console.log("8635-بحد".split(''-'').sort());
console.log("سسس-2132".split(''-'').sort());
console.log("1-حد".split(''-'').sort());