inaz
inaz

Reputation: 1785

How to identify what keyboard language is with jquery

is there any way to identify the keyboard language? i have a simple textbox. that i want to check keyboard language. when the user click on textbox if the keyboard language was Contrary to Persian the user can't type anything and show the error:" change your keyboard language to persian" and when the keyboard language changed user can type.

Upvotes: 8

Views: 5042

Answers (5)

Hamid
Hamid

Reputation: 1563

using jquery :

$("#selector").keyup(function (event) {
    var code = event.key.charCodeAt(0);
    if (isEnglish(code)) {
        alert("you typed in english");
        return;
    }
    else {
        alert("please type in english");
    }
});

function isEnglish(charCode) {
    return (charCode >= 97 && charCode <= 122)
        || (charCode >= 65 && charCode <= 90);
}

Upvotes: 1

n.y
n.y

Reputation: 3490

I have used two different approaches for detecting English and Persian characters in my solution:

document.getElementById('a').addEventListener('keypress',function(e){
     if (isEnglish(e.charCode))
       console.log('English');
     else if(isPersian(e.key))
       console.log('Persian');
     else
       console.log('Others')
});

function isEnglish(charCode){
   return (charCode >= 97 && charCode <= 122) 
          || (charCode>=65 && charCode<=90);
}

function isPersian(key){
    var p = /^[\u0600-\u06FF\s]+$/;    
    return p.test(key) && key!=' ';
}
<input id="a" type="text"/>

Upvotes: 15

Kavian K.
Kavian K.

Reputation: 1370

If you want to match ZERO WIDTH SPACE you should add this too:

\u200B

So

var p = /^[\u0600-\u06FF\u200B\s]+$/;

for more characters like ” | « | » | ?| ; | : | ... see Regex Persian Language

Upvotes: 1

Jameson the dog
Jameson the dog

Reputation: 1806

I don't think that's possible - anyway it's probably not what you want (Caps Lock, for example, will still output English) I'd recommend placing a keypress event listener on your textarea and checking each letter against a "Persian only" regex like this (untested):

document.getElementById('a').addEventListener('keypress',function(e){
     if (e.charCode > 160) 
     console.log('persian');
     else
     console.log('english');
});
<input type="text" id="a"/>

Upvotes: 2

HudsonPH
HudsonPH

Reputation: 1878

This:

function only_persian(str){
    var p = /^[\u0600-\u06FF\s]+$/;
  if (!p.test(str)) {
        alert("not format");
    }
}

or you can use this: http://imanmh.github.io/persianRex/

Upvotes: 0

Related Questions