我有一个文本框,用户可以输入英语(或任何其他从左到右的语言)或RTL语言。
当用户使用RTL语言书写时,必须按下右Shift + Ctrl才能使文本对齐到右侧且为RTL。然而,在Windows(和可能其他现代操作系统中),用户可以设置任何按键组合来切换语言和文本方向。
我知道如何将文本显示为RTL,但如何知道应该显示哪个方向?
是否有一种方法可以检测在文本框/文本域中键入的文本是以RTL方式键入的?
我有一个文本框,用户可以输入英语(或任何其他从左到右的语言)或RTL语言。
当用户使用RTL语言书写时,必须按下右Shift + Ctrl才能使文本对齐到右侧且为RTL。然而,在Windows(和可能其他现代操作系统中),用户可以设置任何按键组合来切换语言和文本方向。
我知道如何将文本显示为RTL,但如何知道应该显示哪个方向?
是否有一种方法可以检测在文本框/文本域中键入的文本是以RTL方式键入的?
dir="auto"
,浏览器便会完成它的工作!请参见:http://www.w3schools.com/tags/att_global_dir.asp。试试这个:
var rtl_rx = /[\u0591-\u07FF]/;
$('textarea').on('keyup',function(){
this.style.direction = rtl_rx.test(this.value) ? 'rtl' : 'ltr';
});
我使用了一个简化的正则表达式来检测RTL
/[\u0591-\u07FF]/
尽管它可能无法捕获Unicode表中的每个RTL字符,但它很可能涵盖了所有实际情况。它包括所有普通的希伯来语和阿拉伯语字符,包括表示元音的字符。
$('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;
}