JavaScript « проверка принадлежности символов определенному юникод-диапазону средствами JavaScript'a

Как проверить средствами JS, все ли символы строки принадлежат определенному диапазону юникода(u+4e00..u+9fff, к примеру)?

1 ответов


По-моему, все гораздо проще и регулярки городить незачем:


String.prototype.isCharInRange = function(from, to) {
    var charCode = this.charCodeAt(0);
    return (charCode >= from.charCodeAt(0) && charCode <= to.charCodeAt(0));
}
 Пример вызова:

"Э".isCharInRange("\u0041", "\u007A");
 

Ответ на самом деле сам по себе напрашивается. Решение в обычном регулярном выражении.


"B".match(/[\u0041-\u007A]/) // => ["B"]
 
Можно, например, накидать простую функцию:

function is_u () {
  var a = arguments, l = a.length, i = 0, undef, char;
  // первый аргумент - символ, который надо определить
  if (l === 0)  { throw new Error('No enough args'); }
  // второй и третий агрументы - символьное обозначение "областей" \u0041-\u007A
  if (a[1] === undef || a[1] === null || a[2] === undef || a[2] === null) { throw new Error('Range not defined'); }
  char = a[0];
  pattern = "[\\" + a[1] + "-" +"\\" + a[2] + "]"; // \u0041-\u007A
  return (char.match(pattern) == null) ? false : true;
}
 
Работать она будет примерно так:

is_u("A", "u0041", "u007A"); // true
is_u("Ю", "u0041", "u007A"); // false