JavaScript中如何处理包含阿拉伯数字和英文数字字符串的分割?

30

当我尝试分割时:

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

然后 JavaScript 给我这个结果:

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

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

当我尝试分割时:

"2132-سسس".split('-')

它给我不同的结果:

[0] - 2132
[1] - سسس

console.log("2132-سسس".split('-'))

这是如何发生的?如何正确实施?


我无法复制该问题 https://onecompiler.com/javascript/3v3946t3r 对于第一个字符串,它对我来说分割得很好。 - karthikdivi
在 Chrome 控制台中尝试了一下,结果显示不同。 - Saurabh Arora
我在Chrome Dev控制台中尝试了这个,似乎确实给出了不同的结果。非常有趣。 - Saharsh
4个回答

16

这取决于您如何键入字符串(从左到右/从右到左)。在提供的问题中,“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('-'));


好的,明白了。但是这个字符串作为后端传给前端的响应时,它却提供了随机结果。怎么解决? - Saurabh Arora
9
谢谢您的提问。您能否详细说明一下“从左到右和从右到左输入”这个主题?它们在一瞥之下看起来非常相似。 - Saharsh
1
@Saharsh 你可以使用 dir="ltr"dir="rtl" 来初始化方向。点击链接以获得更清晰的理解:https://www.w3.org/International/questions/qa-html-dir - Ramesh

3
Unicode要求将文本方向处理放在字符集层面,而不是在标记或格式化层面控制。在缺少强制文本方向的格式化字符的情况下,某些字符(如拉丁字母)从左到右显示,某些字符(如阿拉伯或希伯来字母)从右到左显示,有些标点符号则可能根据前面的字符显示,数字可以作为一组从左到右显示,但组按照前面文本的方向显示。
如果正文中大写字母(按顺序从左到右指定的字符)abc123 456XYZdef 在一个从右到左的字母表中,该文本将显示为abc123 456ZYXdef,其中从右到左的字符按从右到左的顺序显示。如果字符的顺序是(再次严格从左到右阅读)abcXYZ456 123def,它将显示为abc123 456ZYXdef,因为两组数字将按从右到左的顺序显示,在之前从右到左的文本左侧,即使每个组内的数字也是从左到右读取。
由于这些规则,仅凭外观无法确定字符串中字符的顺序。唯一了解实际情况的方法是将字符转换为具有一致顺序的形式,例如十六进制表示形式。

1
这取决于你的字符串是如何输入的(从左到右或从右到左)。
要了解区别,请在输入框上设置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>

了解更多信息,请阅读RTL和LTR之间的区别


-1

Try this

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


6
仅提供代码片段而不向OP解释其错误原因对其学习没有帮助。此外,您的“解决方案”并未回答他们的问题。 - Marie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接