Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

JavaScript学習日記 その0007 文字列の中に半角文字が混ざっているか判定する

参考にさせて頂いたページ

半角かどうかの判定について

半角カナかどうかの判定について

第一水準漢字と第二水準漢字について

JIS文字コード表について

http://charset.7jp.net/sjis.html

サンプルコード

const hankakuChars = [];
let value = event.target.value;

// 改行を削除
value = value.replace(/\r?\n/g, '');

for (let i = 0; i < value.length; i++) {
  // 1文字ずつ16進数文字コードに変換
  const charCode = value.charCodeAt(i);

  // 半角文字に該当するか16進数で比較
  const isHankaku = (charCode >= 0x0 && charCode < 0x81) ||
    charCode === 0xf8f0 ||
    (charCode >= 0xff61 && charCode < 0xffa0) ||
    (charCode >= 0xf8f1 && charCode < 0xf8f4);

  if (isHankaku) {
    hankakuChars.push(value[i]);
  }
}

if (hankakuChars.length === 0) {
  console.log('半角文字はありません。');
} else {
  console.log(hankakuChars);
}

おまけ

UnicodeUTF-8文字集合(文字セット)と文字符号化方式」について

Log in with Atlassian account

0xから始まる数について

0xから始まる数は16進数です。

半角カナかどうか判定する

半角カナかどうかは「Unicode 内のそれぞれの文字種の範囲 - みちのぶのねぐら 工作室 旧館」によると

半角カナなどは、 0xFF61 - 0xFF9F になります。

とのことです。

Unicode一覧 0000-0FFF - Wikipedia などで、 を検索して確認するとよさそうです。

ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚

第一水準漢字と第二水準漢字かどうか判定する

[JavaScript] 全角文字のJIS第一水準、第二水準などをチェックしたい。あとencoding.js « きんくまデザイン によると、JavaScriptの場合は文字を列挙していくか、ライブラリ使うしかなさそうな感じです。

JIS文字コードと句と点について

JIS文字コード表: http://charset.7jp.net/sjis.html

句と点について: たとえば「&H889F」は、JISでは&Hは16進数であること、88の部分が点、9Fの部分が句を表しています。10進数で表現する場合は句、点はまた違います。