在我的 React-Native 应用程序中,我想在文本中添加上标(指数)。
例如,
我有这样的文字:这是一个名为 test^123 的新产品。该产品可以...
所以在这个例子中^123是上标(指数)
我尝试了很多方法,但无法解决问题,因为每次文本都从另一行开始。
有人知道如何解决这个问题吗?
谢谢!
这是一个非常hacky的解决方案,但可以很好地近似英语:
function convertStringToSuperscript(str: string) {
// more options exist: https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts
const superscriptUpperCase = ['ᴬ', 'ᴮ', 'ᶜ', 'ᴰ', 'ᴱ', 'ᴭ', 'ᴳ', 'ᴴ', 'ᴵ', 'ᴶ', 'ᴷ', 'ᴸ', 'ᴹ', 'ᴺ', 'ᴼ', 'ᴾ', 'ᶞ', 'ᴿ', 'ˢ', 'ᵀ', 'ᵁ', 'ᵛ', 'ᵂ', 'ᵡ', 'ᵞ', 'ᶻ'];
const superscriptLowerCase = ['ᵃ', 'ᵇ', 'ᶜ', 'ᵈ', 'ᵉ', 'ᶠ', 'ᵍ', 'ʰ', 'ⁱ', 'ʲ', 'ᵏ', 'ˡ', 'ᵐ', 'ⁿ', 'ᵒ', 'ᵖ', 'ᶞ', 'ʳ', 'ˢ', 'ᵗ', 'ᵘ', 'ᵛ', 'ʷ', 'ˣ', 'ʸ', 'ᶻ'];
const isLowerCase = (code: number) => code >= 97 && code <= 122 // A:65 - Z:90
const isUpperCase = (code: number) => code >= 65 && code <= 90 // a:95 - z:122
const toSuperscript = (char: string): string => {
const code = char.charCodeAt(0)
if (isLowerCase(code)) return superscriptLowerCase[code - 97]
if (isUpperCase(code)) return superscriptUpperCase[code - 65]
// if not in range return character as it was
return char
}
// this part isn't very optimized
return str.split("").map(toSuperscript).join("")
}