【问题标题】:how to concat persian characters with english characters in righ order in javascript?如何在javascript中以正确的顺序将波斯字符与英文字符连接起来?
【发布时间】:2025-12-26 17:00:06
【问题描述】:

我想连接:

“2334”、“234”、“محمد”

​​>

以“2334”为第一个,“محمد”为第二个,“234”的顺序 排在第三位

如何在 javascript 中做到这一点? 谢谢。

【问题讨论】:

  • 将波斯字符放在第二位背后的逻辑是什么?
  • 将波斯字符与英文字符结合 - 那是伊朗国王吗?
  • 我没有使用任何逻辑,只是用 + 运算符连接它们
  • @MohammadHajiaghazadeh 在这种情况下,波斯字符应该排在第三位,但您希望它们排在第二位。原理是什么?
  • @gurvinder372 是的,我希望“محمد”排在第二位

标签: javascript


【解决方案1】:

完成这项工作的一种方法是将这些不同的部分包装在标签中,例如 span 并使用 dir 属性指示方向(或者可以使用 CSS 完成):

var arr = ["2334" , "234", "محمد"];
var output = '<span dir="auto">' + arr[0] + '</span>' +
             '<span dir="auto">' + arr[2] + '</span>' + 
             '<span dir="auto">' + arr[1] + '</span>';

document.body.innerHTML = output;

【讨论】:

  • auto 有效,但 ltr, rtl, ltr 输出 234xxx2334 而不是 2334xxx234 对我来说
  • 我看到你也注意到dir 需要在每个跨度上设置;-)
  • 确实如此。测试数据本来可以更清晰地发现完全逆转。一开始没注意。
【解决方案2】:

试试这个

function wrap(str) {
    return '\u202B' + str + '\u202C';
}

var arr = ["2334" , "234", "محمد"];
var output = arr[0] + wrap(arr[2]) + arr[1];
document.body.innerHTML += output;

【讨论】:

  • 不适用于我的 FF,但适用于我的 chrome(osX 10.9 设置为英文)
【解决方案3】:

如果您只想将其输出到 html 页面并按此顺序显示,只需将所有字符串部分包装到 span 中并在 span 上添加 display:inline-block 规则:

var arr = ["2334" , "234", "محمد"];
document.body.innerHTML = '<span>'+arr[0]+'</span><span>'+arr[2]+'</span><span>'+arr[1]+'</span>';
body&gt;span{ display: inline-block; }

【讨论】:

  • 对我也很好。
  • 是的,因为现在所有元素都被分离了,浏览器不再关心dir了。
【解决方案4】:

为此,您可以使用 unicode。希望对你有帮助,如果我写错了,请见谅

var str = '123' + '\u06a6\u069e\u0681' + '456';
document.querySelector('.result').innerHTML = str;
.result {
  unicode-bidi: bidi-override;
  direction: ltr;
}
&lt;p class="result"&gt;&lt;/p&gt;

【讨论】:

  • 看起来外来词的字母方向错误。
最近更新 更多