让我通过一些例子解释我的问题;
// expected result: ("true" means "rlt" and "false" means "ltr")
var test = "..!"; // true
var test = "te"; // false
var test = "!te"; // false
var test = "..ق"; // true
var test = "مب"; // true
var test = "eس"; // false
var test = "سe"; // true
这是我目前的代码:
// declare direction of comment in textarea
var x = new RegExp("[A-Za-z]"); // is ascii
var isAscii = x.test($("#textarea-edit-"+post_id_for_edit).val().substring(0, 1));
if(isAscii){
$("#textarea-edit-"+post_id_for_edit).css("direction", "ltr");
} else {
$("#textarea-edit-"+post_id_for_edit).css("direction", "rtl");
}
我希望它基于第一个字符,即字母 (波斯语或英语)。但我的代码基于第一个字符(它可以是任何内容,甚至是符号)。
那我怎么能这样做?
答案 0 :(得分:3)
我建议使用带有ASCII字母和波斯语字母regexps的正则表达式作为替换部分,并且只捕获其中一个(例如,ASCII)。如果匹配,并且组1匹配,则将文本标识为ASCII。如果没有匹配,或者比赛成功,但第1组不匹配,则文本应为波斯语。
请参阅以下代码:
function check(s) {
var PersianOrASCII = /[آ-ی]|([a-zA-Z])/;
if ((m = s.match(PersianOrASCII)) !== null) {
if (m[1]) {
return false;
}
else { return true; }
}
else { return true; }
}
console.log(check("..!")); // true
console.log(check("te")); // false
console.log(check("!te")); // false
console.log(check("..ق")); // true
console.log(check("مب")); // true
console.log(check("eس")); // false
console.log(check("سe")); // true

注意:您可以使用[\u0600-\u06FF]
甚至[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF]
regexp微调波斯语字母正则表达式。甚至是[\u06A9\u06AF\u06C0\u06CC\u060C\u062A\u062B\u062C\u062D\u062E\u062F\u063A\u064A\u064B\u064C\u064D\u064E\u064F\u067E\u0670\u0686\u0698\u200C\u0621-\u0629\u0630-\u0639\u0641-\u0654]
(来自persianRex)。
答案 1 :(得分:1)
波斯语字符在阿拉伯语Unicode块中,在U + 0600和U + 06FF之间。
function contain_persian_char(str){
var p = /^[\u0600-\u06FF\s]+$/;
if (p.test(str))
return true;
return false;
}
你也可以简单地使用这个库: persianRex
答案 2 :(得分:0)
您可以简单地使用带有正则表达式检查的箭头函数,就像 perisan-tools 提供的此代码段一样简单:
const isPersian = (str, trimPattern = /[-+()\s.]/g) =>
/^[\u0600-\u06FF\s]+$/.test(str.replace(trimPattern, ""));
const hasPersian = (str) => /[\u0600-\u06FF]/.test(str);
您可以根据需要进行调整。
const isPersian = (str, trimPattern = /[-+()\s.]/g) =>
/^[\u0600-\u06FF\s]+$/.test(str.replace(trimPattern, ""));
const hasPersian = (str) => /[\u0600-\u06FF]/.test(str);
//--------------examples-------------------
console.log(isPersian(""),isPersian("asdas"),isPersian("."),isPersian("شسیشسی"),isPersian("شیش سی "),isPersian("شیش. سی "),isPersian("شیش. سdddddی` "),isPersian("中國人"),isPersian("?"));
// false false false true true true false false false
console.log(hasPersian(""),hasPersian("asdas"),hasPersian("."),hasPersian("شسیشسی"),hasPersian("شیش سی "),hasPersian("شیش. سی "),hasPersian("شیش. ddddddسی "),hasPersian("中國人"),hasPersian("?"));
// false false false true true true true false false