我有一个文本区域,用户可以在其中输入英文(或任何其他从左到右的语言)或 RTL 语言的文本。
当用户在 RTL 中书写时,用户必须按 Right-shift + ctrl 才能使文本向右对齐并成为 rtl。但是,在 Windows(可能还有其他现代操作系统)中,用户可以设置任何组合键来切换语言和文本方向。
我知道如何将文本显示为 RTL,但我如何知道显示的方向?
有没有办法检测在 textarea/text-field 中输入的文本是否被输入为 RTL?
我有一个文本区域,用户可以在其中输入英文(或任何其他从左到右的语言)或 RTL 语言的文本。
当用户在 RTL 中书写时,用户必须按 Right-shift + ctrl 才能使文本向右对齐并成为 rtl。但是,在 Windows(可能还有其他现代操作系统)中,用户可以设置任何组合键来切换语言和文本方向。
我知道如何将文本显示为 RTL,但我如何知道显示的方向?
有没有办法检测在 textarea/text-field 中输入的文本是否被输入为 RTL?
我想出了一个更简单和更好的解决方案。只需添加dir="auto"
元素,浏览器就会完成它的工作!
尝试这个:
var rtl_rx = /[\u0591-\u07FF]/;
$('textarea').on('keyup',function(){
this.style.direction = rtl_rx.test(this.value) ? 'rtl' : 'ltr';
});
我使用简化的 RegExp 来检测 RTL
/[\u0591-\u07FF]/
虽然它不会捕获 Unicode 表中的每一个 RTL 字符,但它可能涵盖了所有现实生活中的情况。它包括所有正常的希伯来语和阿拉伯语字符,包括元音字符。
您可以使用正则表达式快速编写一小段 JavaScript/jQuery 代码。正则表达式在 JavaScript 中是有限的,所以你需要使用完全支持 Unicode的XRegExp库——如果你添加插件的话。然后,您可以使用\p{Hebrew}之类的表达式检查字符以查看它们属于哪个 Unicode 块。http://www.regular-expressions.info/unicode.html
面对同样的困境,我为自己编写了一个函数,该函数循环遍历每个字符串中的字符并计算希伯来字符的出现次数(我的网站是意第绪语/英语双语)。然后字符串得到一个分数,并将一个'rtl'类应用于具有高分的元素。您可以轻松地将 Unicode 中的所有 RTL 语言添加到 for 循环中,以使其更通用。
请注意外部资源链接到 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;
}