4

I know how to detect arabic characters in a string.

var arabic = /[\u0600-\u06FF]/;
var string = 'عربية‎';
var flag = arabic.test(string); // flag is true in this case

I am wondering how to detect total number of arabic characters in a string ?

Sikander
  • 834
  • 2
  • 10
  • 33

2 Answers2

3

Regexp alternative

var arabic = /[\u0600-\u06FF]/g, // <--- g=Match global (all)
    string = 'مرحبا';
    count  = string.split(arabic).length - 1);

// Or
var match = string.match(arabic);
count = match ? match.length : 0;

Loop alternative for performance

If performance is important you could also do a loop:

function count(string){ 
    var char, i, len = string.length, count = 0;
    for (i = 0; i < len; ++i)
        if ((char = string.charCodeAt(i)) >= 0x600 && char <= 0x6ff)
            ++count;
    return count;
}

On some quick JSPerf tests the loop version performs about 30 times better on short strings and 10 times better on long strings (7000 characters). Varying between browsers.

user13500
  • 3,817
  • 2
  • 26
  • 33
0

You can do it like this:

var string = 'ربية';
function isArabic(char){
    var pattern = new RegExp(/[\u0600-\u06FF]/);
    return pattern.test(char);
}

function count(string){ 
    var count = 0;
    for (var i = 0; i< string.length; i++){
        if (isArabic(string.charAt(i))){
            count++;
        };
    };
    return count;
}

Here is fiddle : http://jsfiddle.net/Goodluck/Gt64t/

Y.Puzyrenko
  • 2,166
  • 1
  • 15
  • 23