Как разделение JavaScript работает на арабских и английских числовых строках?

Когда я попытался разделить:

"بحد-8635".split('-')

тогда JavaScript дает мне такой результат:

[0] - بحد,
[1] - 8635

console.log("بحد-8635".split('-'))

Ответы

Ответ 1

Это зависит от того, как вы вводите строку (слева направо/справа налево). В приведенном вопросе "2132- سسس" было напечатано слева направо, а "8635- بحد" - справа налево.

Проверьте приведенный ниже фрагмент.

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('-'));

Ответ 2

Вместо того чтобы рассматривать направление текста как проблему, которая должна контролироваться на уровне разметки или форматирования, Unicode требует, чтобы он обрабатывался на уровне набора символов. При отсутствии символов форматирования, которые бы указывали направление текста, некоторые символы (например, буквы латинского алфавита) отображаются слева направо, некоторые (например, буквы арабского или иврита) отображаются справа налево, а некоторые (например, знаки препинания) могут отображаться способами, которые зависят от предыдущих символов, а некоторые (например, цифры) могут отображаться слева направо в виде группы, но с отображением групп в соответствии с направлением предыдущего текста.

Если заглавные буквы в тексте (символы, указанные по порядку, слева направо) abc123 456XYZdef были в алфавите справа налево, текст был бы отображен как abc123 456ZYXdef с отображением символов справа налево в порядке справа налево. Если бы порядок символов был (опять же, чтение строго слева направо) был abcXYZ456 123def, он был бы отображен как abc123 456ZYXdef, потому что две группы чисел были бы отображены в порядке справа налево, слева предыдущего текста справа налево, даже если числа в каждой группе будут читаться слева направо.

Как следствие этих правил, невозможно узнать порядок символов в строке, просто взглянув на нее. Единственный способ действительно узнать, что происходит, - это транслитерировать символы в формы, подобные их шестнадцатеричным представлениям, которые имеют последовательный порядок.

Ответ 3

Это зависит от того, как набрана ваша строка (ltr or rtl).

Чтобы понять разницу, установите атрибут dir на входе, а затем разделите значение:

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>

Ответ 4

Попробуй это

console.log("2132-سسس".split('-').sort());
console.log("8635-بحد".split('-').sort());
console.log("سسس-2132".split('-').sort());
console.log("1-حد".split('-').sort());