Как преобразовать полубайтовые символы в полные байты - PullRequest
1 голос
/ 06 марта 2020

Я должен попытаться преобразовать каждый ввод в текстовое поле, которое преобразуется в полнотайтовый символ, пожалуйста, найдите ниже мой код ...

 static convertToFullWidth(string: any) {
    if(string){
      var listOfCharacters = '';
      for (let index = 0; index < string.length; index++) {
        var selectedElement = string[index].charCodeAt(0);
        if (0x0020 < selectedElement && selectedElement < 0x007F) {
          selectedElement = 0xFF00 + (selectedElement - 0x0020);
        }
        if (0x0020 === selectedElement) {
          selectedElement = 0x3000;
        }
        listOfCharacters += String.fromCharCode(selectedElement);
      }
      return listOfCharacters;
    }
  }

Попытки:

Рабочий ввод - ウ マ ン グ ナ イ Не работает 9 マ ン ク ナ イ

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Я не уверен, есть ли математический шаблон для кодовых точек Юникода, который вы могли бы использовать здесь. Кажется, что нет согласованности между одним и другим.

Эта страница предоставляет простой подход, который заключается в простом отображении с полуширины на полную ширину и использовании заменить регулярные выражения на совпавшие символы:

function hankana2Zenkana(str) {
    var kanaMap = {
        'ガ': 'ガ', 'ギ': 'ギ', 'グ': 'グ', 'ゲ': 'ゲ', 'ゴ': 'ゴ',
        'ザ': 'ザ', 'ジ': 'ジ', 'ズ': 'ズ', 'ゼ': 'ゼ', 'ゾ': 'ゾ',
        'ダ': 'ダ', 'ヂ': 'ヂ', 'ヅ': 'ヅ', 'デ': 'デ', 'ド': 'ド',
        'バ': 'バ', 'ビ': 'ビ', 'ブ': 'ブ', 'ベ': 'ベ', 'ボ': 'ボ',
        'パ': 'パ', 'ピ': 'ピ', 'プ': 'プ', 'ペ': 'ペ', 'ポ': 'ポ',
        'ヴ': 'ヴ', 'ヷ': 'ヷ', 'ヺ': 'ヺ',
        'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
        'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
        'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
        'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
        'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
        'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
        'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
        'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
        'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
        'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
        'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
        'ッ': 'ッ', 'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ',
        '。': '。', '、': '、', 'ー': 'ー', '「': '「', '」': '」', '・': '・'
    };

    var reg = new RegExp('(' + Object.keys(kanaMap).join('|') + ')', 'g');
    return str
            .replace(reg, function (match) {
                return kanaMap[match];
            })
            .replace(/゙/g, '゛')
            .replace(/゚/g, '゜');
};

console.log(hankana2Zenkana('アシタハイイテンキカナ、ブーヴー'));

Также предусмотрена функция для букв английского языка sh и цифр индуистского арабского c:

function hankaku2Zenkaku(str) {
  return str.replace(/[A-Za-z0-9]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
  });
}

console.log(hankaku2Zenkaku('123abC')); // '123abC'

Вы можете связать их вместе, чтобы получить желаемый результат:

function hankana2Zenkana(str) {
  var kanaMap = {
    'ガ': 'ガ',
    'ギ': 'ギ',
    'グ': 'グ',
    'ゲ': 'ゲ',
    'ゴ': 'ゴ',
    'ザ': 'ザ',
    'ジ': 'ジ',
    'ズ': 'ズ',
    'ゼ': 'ゼ',
    'ゾ': 'ゾ',
    'ダ': 'ダ',
    'ヂ': 'ヂ',
    'ヅ': 'ヅ',
    'デ': 'デ',
    'ド': 'ド',
    'バ': 'バ',
    'ビ': 'ビ',
    'ブ': 'ブ',
    'ベ': 'ベ',
    'ボ': 'ボ',
    'パ': 'パ',
    'ピ': 'ピ',
    'プ': 'プ',
    'ペ': 'ペ',
    'ポ': 'ポ',
    'ヴ': 'ヴ',
    'ヷ': 'ヷ',
    'ヺ': 'ヺ',
    'ア': 'ア',
    'イ': 'イ',
    'ウ': 'ウ',
    'エ': 'エ',
    'オ': 'オ',
    'カ': 'カ',
    'キ': 'キ',
    'ク': 'ク',
    'ケ': 'ケ',
    'コ': 'コ',
    'サ': 'サ',
    'シ': 'シ',
    'ス': 'ス',
    'セ': 'セ',
    'ソ': 'ソ',
    'タ': 'タ',
    'チ': 'チ',
    'ツ': 'ツ',
    'テ': 'テ',
    'ト': 'ト',
    'ナ': 'ナ',
    'ニ': 'ニ',
    'ヌ': 'ヌ',
    'ネ': 'ネ',
    'ノ': 'ノ',
    'ハ': 'ハ',
    'ヒ': 'ヒ',
    'フ': 'フ',
    'ヘ': 'ヘ',
    'ホ': 'ホ',
    'マ': 'マ',
    'ミ': 'ミ',
    'ム': 'ム',
    'メ': 'メ',
    'モ': 'モ',
    'ヤ': 'ヤ',
    'ユ': 'ユ',
    'ヨ': 'ヨ',
    'ラ': 'ラ',
    'リ': 'リ',
    'ル': 'ル',
    'レ': 'レ',
    'ロ': 'ロ',
    'ワ': 'ワ',
    'ヲ': 'ヲ',
    'ン': 'ン',
    'ァ': 'ァ',
    'ィ': 'ィ',
    'ゥ': 'ゥ',
    'ェ': 'ェ',
    'ォ': 'ォ',
    'ッ': 'ッ',
    'ャ': 'ャ',
    'ュ': 'ュ',
    'ョ': 'ョ',
    '。': '。',
    '、': '、',
    'ー': 'ー',
    '「': '「',
    '」': '」',
    '・': '・'
  };

  var reg = new RegExp('(' + Object.keys(kanaMap).join('|') + ')', 'g');
  return str
    .replace(reg, function(match) {
      return kanaMap[match];
    })
    .replace(/゙/g, '゛')
    .replace(/゚/g, '゜');
};

function hankaku2Zenkaku(str) {
  return str.replace(/[A-Za-z0-9]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
  });
}

function allhankaku2Zenkaku(str) {
  return hankaku2Zenkaku(hankana2Zenkana(str));
}

console.log(allhankaku2Zenkaku('abcde01234アイウエオガギグゲゴ'));
1 голос
/ 06 марта 2020

Чтобы преобразовать половинную катакану в полную ширину катакана, вы можете просто использовать строковый метод normalize с параметром 'NFKC' (Форма нормализации K C):

let str = 'アシタハイイテンキカナ、ブーヴー';
console.log (str.normalize ('NFKC')); // -> 'アシタハイイテンキカナ、ブーヴー'
...