2016-08-14 55 views
1

让我通过一些例子来解释我的问题;如何检测波斯语字符?

    // 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

检查https://jsfiddle.net/22uovqhc/。实际上,我对波斯信的正则表达式有怀疑,有建议使用'[\ u0600- \ u06FF]',甚至是'[\ u0600- \ u06FF \ uFB8A \ u067E \ u0686 \ u06AF]' –

+0

你的意思是阿拉伯语脚本中的[波斯语字母](https://en.wikipedia.org/wiki/Persian_alphabet)中的字母? (这与印地语是用梵文脚本写的相似。)当然,许多语言(包括英语)使用不在他们的字母表中的字母,因此最好不要过于狭隘地关注语言的字母表。 –

回答

3

我建议使用与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]正则表达式波斯信正则表达式。甚至[\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)。

+0

一个非常相似的[question](http://stackoverflow.com/questions/38965825/how-can-i-change-the-direction-of-textarea-when-there-is-persian-character)..你可能会想看看它。 –

1

波斯语字符在U + 0600和U + 06FF之间的阿拉伯Unicode区块内。

function contain_persian_char(str){ 
    var p = /^[\u0600-\u06FF\s]+$/; 

    if (p.test(str)) 
     return true; 
    return false; 
} 

您也可以使用这个库简单: persianRex