如何检测在文本区域中键入的文本是RTL

Nic*_*nto 13 html javascript css jquery right-to-left

我有一个textarea,用户可以用英语(或任何其他从左到右的语言)或RTL语言输入文本.

当用户在RTL中写入时,用户必须按右移+ ctrl才能使文本向右对齐并且为rtl.但是,在Windows(可能还有其他现代操作系统)中,用户可以设置任何组合键来切换语言和文本方向.

我知道如何将文本显示为RTL,但我怎么知道要显示哪个方向?

有没有办法检测到textarea/text-field中输入的文本是否被输入为RTL?

s3v*_*v3n 27

我想出了一个更简单,更好的解决方案.只需添加dir="auto"元素,浏览器就可以完成它的工作!

请参阅:http://www.w3schools.com/tags/att_global_dir.asp

  • IE 11不支持 (2认同)

ori*_*dam 8

尝试这个:

var rtl_rx = /[\u0591-\u07FF]/;
$('textarea').on('keyup',function(){
    this.style.direction = rtl_rx.test(this.value) ? 'rtl' : 'ltr';
});
Run Code Online (Sandbox Code Playgroud)

我使用了一个简化的 RegExp 来检测 RTL

/[\u0591-\u07FF]/
Run Code Online (Sandbox Code Playgroud)

虽然它不会捕获 Unicode 表中的每一个 RTL 字符,但它可能涵盖了所有现实生活中的情况。它包括所有正常的希伯来语和阿拉伯语字符,包括元音字符。


Tri*_*tan 1

您可以使用正则表达式快速编写一小段 JavaScript/jQuery 代码。不过,正则表达式在 JavaScript 中受到限制,因此如果您添加插件,您将需要使用具有完整 Unicode 支持的XRegExp库。然后,您可以使用\p{Hebrew}等表达式检查字符,看看它们属于哪个 Unicode 块。http://www.regular-expressions.info/unicode.html

面对同样的困境,我自己编写了一个函数,循环遍历每个字符串中的字符并计算希伯来字符出现的次数(我的网站是意第绪语/英语双语)。然后字符串获得一个分数,并将“rtl”类应用于具有高分数的元素。您可以轻松地将 Unicode 中的所有 RTL 语言添加到 for 循环中,以使其更加通用。

http://jsfiddle.net/Swyu4/9/

请注意 jsfiddle 中链接到 XRegExp 库的外部资源。

$('p').each(function() {
    if(isRTL($(this).text()))
        $(this).addClass('rtl');
});

function isRTL(str) {
    var isHebrew = XRegExp('[\\p{Hebrew}]');
    var isLatin = XRegExp('[\\p{Latin}]');
    var partLatin = 0;
    var partHebrew = 0;
    var rtlIndex = 0;
    var isRTL = false;

    for(i=0;i<str.length;i++){
        if(isLatin.test(str[i]))
            partLatin++;
        if(isHebrew.test(str[i]))
            partHebrew++;
    }
    rtlIndex = partHebrew/(partLatin + partHebrew);
    if(rtlIndex > .5) {
        isRTL = true;
    }
/*
console.log('Latin score: ' + partLatin);
console.log('Hebrew score: ' + partHebrew);
console.log('trlIndex score: ' + rtlIndex);
console.log('isRTL: ' + isRTL);
*/

    return isRTL;
}
Run Code Online (Sandbox Code Playgroud)