如何识别波斯语字符?
How can I detect Persian characters?
让我用一些例子来解释我的问题;
// 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");
}
我希望它是基于第一个字符,这是一个字母(波斯语或英语)。但是我的代码是基于第一个字符(它可以是任何字符,甚至是一个符号)。
我该怎么做呢?
我建议使用带有ASCII字母和波斯语字母的正则表达式作为交替部分,并且只捕获其中一个(例如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)
波斯语字符位于阿拉伯语Unicode块内,介于U+0600和U+06FF之间。
function contain_persian_char(str){
var p = /^['u0600-'u06FF's]+$/;
if (p.test(str))
return true;
return false;
}
你也可以简单地使用这个库:persianRex
您可以简单地使用这个正则表达式检查,它最初可在perisan-tools:
const faAlphabet = "ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی";
const faNumber = "۰۱۲۳۴۵۶۷۸۹";
const faShortVowels = "َُِ";
const faOthers = "آاً";
const faMixedWithArabic = "ًٌٍَُِّْٰٔءكةۀأإيـئؤ،";
const faText = faAlphabet + faNumber + faShortVowels + faOthers;
const faComplexText = faText + faMixedWithArabic;
const isPersian = (str, isComplex = false, trimPattern = /["'-+()؟'s.]/g) => {
const text = str.replace(trimPattern, "");
const faRegex = isComplex ? faComplexText : faText;
return new RegExp(`^[${faRegex}]+$`).test(text);
};
console.log(isPersian("این یک متن فارسی است؟")); // true
console.log(isPersian("آیا سیستم میتواند گزینه های دیگری را به اشتباه به عنوان متن فارسی تشخیص دهد؟")); // true
console.log(isPersian("Lorem Ipsum Test")); // false
console.log(isPersian("これはペルシア語のテキストですか")); //false
console.log(isPersian("Это персидский текст?")); //false
console.log(isPersian("这是波斯文字吗?")); //false
console.log(isPersian("هل هذا نص فارسي؟")); //false
console.log(isPersian("أكد رئيس اللجنة العسكرية الممثلة لحكومة الوفاق الوطني في ليبيا أحمد علي أبو شحمة، أن اللجنة لا تستطيع تنفيذ خطتها لإخراج العناصر الأجنبية من أراضي البلاد.")); //false
我知道这可能很复杂,但这是正确检测persian
的正确方法,要看到接受的答案不能正常工作,只需使用我们放在下面的选项进行测试。
相关文章:
- 在csv文件名中使用西班牙语字符
- 如何在javascript中按正确的顺序连接波斯语字符和英语字符
- 正则表达式不允许所有特殊字符,但允许其他语言,如希伯来语 JavaScript
- j查询完整日历到波斯语
- Django 在 init 中将波兰语字符传递给 Angular 会导致词法分析器错误
- 如何排除特殊字符并允许西班牙语/英语字母
- 如何在输入时将TextBox输入语言更改为波斯语
- 如何使用JavaScript在网页上以不同颜色显示英语和波斯语单词
- 西班牙语字符在javascript中不能正确显示
- 如何在警告框中显示波斯语字符
- angularjs中的波斯语URL问题
- 如何计数印度语字符
- MVC中的波斯语日历,Asp.net
- 生成波斯语字母
- 仅对类型单词英语或波斯语或数字进行验证
- 如何识别波斯语字符?
- jQuery在波斯语
- PHP警报消息,波斯语
- 在请求字符串中发送印地语字符时获取垃圾值
- 在 pc 上使用相同的 js 代码和 tizen 将日期从公历转换为波斯语的不同结果