2016-01-20 61 views
1

我正在研究JavaScript代碼,顯示帶有混合阿拉伯文,數字和英文單詞的字符串。該代碼替換字符串「##」一個號碼,如下,
如何正確地將數字與混合的阿拉伯文和英文字符串

" بون شاسع ##mi".replace("##",123) 

我希望結果是(數字「123」是完全阿拉伯語字符前「MI」和後):

بونشاسعenter image description here

不過,我總是得到以下結果(數字 「123」 被意外地放在阿拉伯語字符前),
enter image description here

那麼,任何人都可以告訴我如何得到這個想要的結果嗎?

+1

嘗試在##之前加上'\ u200E'(你可以將它作爲替換的一部分)。從左到右的標記應該有助於解決問題。 –

+0

@NiettheDarkAbsol,你能否說明爲什麼在##之前添加\ u200E才能解決問題?謝謝。 –

+0

'\ u200E'是從左到右的標記字符。這是一個看不見的字符,它告訴文本渲染器後面的內容應該朝這個方向渲染 - 現在,它將按阿拉伯文本使用的從右向左的方向編號。 –

回答

1

由於文本是阿拉伯文,它使用從右到左的方向。但是,當您將數字與您希望從左到右顯示的數字混用時,事情會變得棘手。

這可以使用\u200E固定,該值代表從左到右標記字符。這是一個不可見的字符,它向文本渲染器指示後面的內容應該在該方向上呈現,而不管正常的規則會提示什麼。

您可以添加標記爲.replace調用的一部分,就像這樣:

"بون شاسع##mi".replace("##","\u200E"+123) 

這裏是控制檯輸出的比較,沒有與標記:

Console test

+0

如果在第一個##之前加上\ u200E,我可以得到想要的結果。但是,如果\ u200E在第二個##之前添加,則「123」將成爲行的第一個字符。你知道原因嗎? –

+0

什麼「秒'##'」? –

+0

第一個「##」在「mi」之前。第二個「##」在「replace(」)之後。 –

相關問題