下面是我的代码:
$("body").on('input', 'textarea', function() {
var el = $(this);
var len = el.val().length;
if (len <= 1){
var x = new RegExp("[A-Za-z]"); // is ascii
var isAscii = x.test(el.val().substring(0, 1));
if(isAscii){
el.css("direction", "ltr");
} else {
el.css("direction", "rtl");
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea>dynamic direction</textarea>
我现在的代码改变了这样一个文本区域的方向,它是基于第一个字符:
- 如果第一个字符是波斯语字符或符号,它将
rlt
方向设置为该文本区域。 - 如果第一个字符是英语字符,它将
lrt
方向设置为该文本区域。
这不是我想要的,我想要的是:
- 如果第一个字母*(非符号)* 是英语字母,则设置文本区域
ltr
方向,否则设置为rtl
。
下面是一些例子:
var test = "..!"; // rtl
var test = "te"; // ltr
var test = "!te"; // ltr
var test = "..ق"; // rtl
var test = "مب"; // rtl
var test = "eس"; // ltr
var test = "سe"; // rtl
var test = "^سe"; // rtl
var test = ".32eس"; // ltr
我该怎么做?
3条答案
按热度按时间h9a6wy2h1#
如果我正确阅读了问题,目标是如果第一个非符号/符号/标点字符是ASCII字符,则从左到右阅读文本,否则从右到左阅读。
我认为你所需要做的就是修改正则表达式,首先匹配0个或多个符号/符号/标点符号,然后测试下一个字符是否是ASCII字符。
正则表达式
[-!$%^&*()_+|~=
{}[]:";'<>?,./]是一个相当完整的用于符号/符号/标点符号的正则表达式,可以在这里找到:[https://stackoverflow.com/a/8359631/4132627](https://stackoverflow.com/a/8359631/4132627)。您可能需要添加到它,因为你认为合适的。 两个字符组之间的
*表示“匹配前一个字符组的0或更多”。 我已经用这个正则表达式更新了你的代码片段,它看起来像预期的那样工作。还删除了长度检查,因为无论有多少个字符,它都需要运行。 这可能并不完美-有许多情况可能被遗漏了。您可能需要稍微尝试一下。例如,第二个字符组是否也应该包括数字(
[A-Za-z0-9]`)?无论如何,我希望这有帮助!
x6492ojm2#
你可以有一个波斯语数组,或者任何从右到左的字母,然后使用
.inArray()
函数检查数组中是否存在第一个字母,类似于这样:jsFiddle
klr1opcd3#
我使用这个实用的CSS类,它会根据内容的首选方向自动改变方向: