JavaScript:如何检查字符是否为 RTL?

标签 javascript unicode right-to-left bidi

如何以编程方式检查浏览器是否将某些字符视为 JavaScript 中的 RTL?

也许创建一些透明的 DIV 并查看放置文本的位置?

一点上下文。 Unicode 5.2 添加了 Avestan 字母表支持。因此,如果浏览器支持 Unicode 5.2,它会将 U+10B00 之类的字符视为 RTL(目前只有 Firefox 这样做)。否则,它将这些字符视为 LTR,因为这是默认设置。

我如何以编程方式检查它?我正在编写一个 Avestan 输入脚本,如果浏览器太笨,我想覆盖 bidi 方向。但是,如果浏览器确实支持 Unicode,则不应覆盖 bidi 设置(因为这将允许混合 Avestan 和 Cyrillic)。

我目前这样做:

var ua = navigator.userAgent.toLowerCase();

if (ua.match('webkit') || ua.match('presto') || ua.match('trident')) {
    var input = document.getElementById('orig');
    if (input) {
        input.style.direction = 'rtl';
        input.style.unicodeBidi = 'bidi-override';
    }
}

但是,很明显,在 Chrome 和 Opera 开始支持 Unicode 5.2 之后,这会导致脚本的可用性降低。

最佳答案

function isRTL(s){           
    var ltrChars    = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF',
        rtlChars    = '\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC',
        rtlDirCheck = new RegExp('^[^'+ltrChars+']*['+rtlChars+']');

    return rtlDirCheck.test(s);
};

playground page

关于JavaScript:如何检查字符是否为 RTL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12006095/

相关文章:

javascript - 在 JavaScript 中将 "9:00 pm"转换为 "21:00:00"的正确方法是什么?

ios - 为什么我们应该使用 NSString 的 uppercaseStringWithLocale 来获取正确的大写字符串?

java - 创建自定义 JFileChooser

android - 强制 RTL 布局方向不适用于应用程序

html - Bootstrap 下拉 RTL 对齐

javascript - 高度自动 - 调整浏览器大小时显示隐藏内容

javascript - 在 javascript 中匹配 @(\w+) 并替换

javascript - React.js 图像未加载

php - Swift、php 和 unicode 字符

c# - 我从 C# 成功调用了 advapi32 的 LsaEnumerateAccountRights()。现在如何解码它返回的 LSA_UNICODE_STRING 数组?