"dir"-输入RTL但有LTR测量数据| “فثسف 3 cm dboc”应该是

"dir"-Input RTL but with LTR measurement data | "فثسف 3 cm فثسف" should be (فثسفy 3 cm فثسف)

有人知道这是浏览器、windows 语言还是一般问题吗?

我在我的电脑上安装了第二种语言 "Arabic (Saudi Arabia) Arabic (101) keyboard"。

如果我输入像 "test 3cm test" 这样的文本(对于“3cm”,我切换到德语键盘)它或多或少是正确的。 - dir="rtl".

当我将 ltr 用作 dir 时,当我将其复制并粘贴到此处时看起来像。

ova 3cm ova

现在是(主要)问题。 当我在 3cm 之间添加 space 时,反之亦然。

你知道是否可以像我下面的图片修改那样用JavaScript或HTML来处理?

还是语言行为?

提前致谢! :-)

我尝试了什么?

  1. dir
  2. 中使用auto

<html dir="rtl" lang="ar">
<body>
  <input type="text" dir="auto" style="text-align: left;" value="فثسف 3 cm فثسف" />
</body>
</html>

还有这个。

<html dir="rtl" lang="ar">
<body>
  <input type="text" dir="auto" style="text-align: right;" value="فثسف 3 cm فثسف" />
</body>
</html>

value 来自这个工作流程。

  1. 切换到阿拉伯语(RTL 语言)
  2. 写入"test "
  3. 切换到德语(LTR 语言)
  4. 写“3厘米”
  5. 切换到阿拉伯语(RTL 语言)
  6. 写入"test"
  7. Input中的Strg + A,放入value="STRG + V"

问题是你准备好走多远。你可以用 <span> 标签包裹 3 cm,然后它将独立于它周围的一切进行布局,

<div dir="rtl">فثسف <span dir="ltr">3 cm</span> فثسف</div>

或者您可以插入 &lrm;&rlm;,或者一些方向覆盖字符:

<div dir="rtl">فثسف &lrm;3 cm&rlm; فثسف</div>

我将@alex-cohn 的想法与 &lrm; and &rlm; 标签一起使用并开发了我需要的东西

var ltrMarkThere = false;
document.getElementById("test").addEventListener("keydown", function testKey(e) {
  if(e.key.match(/[0-9]/)) {
    document.getElementById("test").value += "\u202a";
    ltrMarkThere = true;
  } else if(ltrMarkThere && e.key.charCodeAt(0) > 127) {
    document.getElementById("test").value = document.getElementById("test").value.replace(/( ?)$/, "\u202c");
    ltrMarkThere = false;
  }
});
<html dir="rtl" lang="ar">
  <head>
  </head>
  <body>
    <input id="test" type="text" style="direction: rtl; text-align: right;" autocomplete="off" autofocus="true" value="فثسف ‪3 cm‬ فثسف" />
    <!-- There is a hidden UTF8 Right-to-left-mark and hidden UTF8 Left-to-right-mark which allows to have it like this  -->
  </body>
</html>