書式の設定

このサンプルでは複数行テキストコントロールで指定した文字種のみを適用する方法を紹介しています。設定できる文字種は、コンボボックスから選択することができます。

複数行テキストコントロールを特徴づける入力制限の機能について解説します。 文字種の制限 複数行テキストコントロールでは、入力可能な文字種をsetFormatメソッドで制限することができます。setFormatメソッドに設定できるキーワードは、次の表のとおりです。また、ここで指定された以外の文字種が入力されると、onInvalidInputイベントが発生します。 全角 半角 説明 A A 大文字のアルファベット(A~Z) a a 小文字のアルファベット(a~z) K K カタカナ(促音・拗音の小書き表記あり) N N カタカナ(促音・拗音の小書き表記なし) 9 9 数字(0~9) # # 数字および数字関連記号(0~9、+ - $ % \ , .) @ @ 記号 B B 2進数(0または1) X X 16進数(0~9、A~F) S S 空白文字 J - ひらがな(促音・拗音の小書き表記あり) G - ひらがな(促音・拗音の小書き表記なし) Z - 空白文字以外のすべての全角文字 T - サロゲートペア文字 I - JIS X 0208で構成された文字 M - Shift JISで構成された文字 V - IVS(Ideographic Variation Sequence)文字 D - 空白文字以外の2バイト文字(サロゲートペア文字、IVS文字、空白文字を除いた全角文字) - H 空白文字以外のすべての半角文字 - ^ 指定した書式に含まれないすべての文字 以下に、入力可能な文字種を設定する具体例を示します。 次のコードは、半角大文字のアルファベット(A~Z)と2進数(0, 1)のみを許可します。 次の例では、半角大文字のアルファベットと数字(0~9)が入力可能になります。キーワード'X'で指定した16進数は、別のキーワードの'A'と'9'に含まれているので、無視されます。 次のコードでは、すべての半角文字の入力が許可されます。キーワード'AaK9'で指定した文字種は'H'に包含されているので、この部分は無視されます。 次に示す2つの例は、どちらもスペースを含むすべての文字種を許可するものです。デフォルトでは、最初の例のように設定されていますので、2つ目の例のようにキーワード'ZHSS'を指定しなくても同じ動作となります。 次に示す2つのコードは、すべての文字種の入力を拒否します。スペースの入力も許可されません。この例が示すように、キーワード'^'は、その後に記述されたキーワードの補集合を表します。 また、入力可能な文字種から特定の文字種を除外することもできます。次のコードはすべての全角文字からサロゲート文字だけを除外します。 文字列の自動変換 setAutoConvertメソッドをtrueに設定すると、setFormatメソッドの設定内容に基づいて、変換可能な文字はすべて自動的に変換されます。たとえば、setFormatメソッドで'A'キーワードが設定されていると、小文字を入力しても自動的に大文字に変換されます。また、全角文字だけが許可されている場合は、入力された半角文字は全角文字に変換されます。 コントロール内部で行われる自動変換の手順を以下に示します。 小文字から大文字、または大文字から小文字への変換を行います。 手順1の変換が行われない場合、全角から半角、または半角から全角への変換を行います。 手順2の変換が行われない場合、全角大文字から半角小文字、全角小文字から半角大文字、半角大文字から全角小文字、半角小文字から全角大文字のいずれかの変換を行います。 半角カタカナ、全角カタカナ、およびひらがなは、次のように変換されます。 半角カタカナは全角カタカナに変換。変換できない場合はひらがなに変換。 全角カタカナは半角カタカナに変換。変換できない場合はひらがなに変換。 ひらがなは全角カタカナに変換。変換できない場合は半角カタカナに変換。 setFormatメソッドに'^V'(IVS文字を除外する)が設定された場合、IVS文字およびIVSの親となる漢字(親字)は次のように変換されます。 IVS文字は親字に変換されます。 辻󠄀→辻 親字はそのまま入力されます。 辻→辻
import '@mescius/inputman/CSS/gc.inputman-js.css'; import { InputMan } from '@mescius/inputman'; import './styles.css'; InputMan.appearanceStyle = InputMan.AppearanceStyle.Modern; const gcMultiLineTextBox = new InputMan.GcMultiLineTextBox(document.getElementById('gcMultiLineTextBox'), { format: '' }); const format = new InputMan.GcComboBox(document.getElementById('format'), { items: [ { value: 'A', desc: '全角大文字のアルファベット' }, { value: 'A', desc: '半角大文字のアルファベット' }, { value: 'a', desc: '全角小文字のアルファベット' }, { value: 'a', desc: '半角小文字のアルファベット' }, { value: 'K', desc: '全角カタカナ(促音・拗音の小書き表記あり)' }, { value: 'K', desc: '半角カタカナ(促音・拗音の小書き表記あり)' }, { value: 'N', desc: '全角カタカナ(促音・拗音の小書き表記なし)' }, { value: 'N', desc: '半角カタカナ(促音・拗音の小書き表記なし)' }, { value: '9', desc: '全角数字' }, { value: '9', desc: '半角数字' }, { value: '#', desc: '全角数字および数字関連記号' }, { value: '#', desc: '半角数字および数字関連記号' }, { value: '@', desc: '全角記号' }, { value: '@', desc: '半角記号' }, { value: 'B', desc: '全角2進数' }, { value: 'B', desc: '半角2進数' }, { value: 'X', desc: '全角16進数' }, { value: 'X', desc: '半角16進数' }, { value: 'S', desc: '全角空白文字' }, { value: 'S', desc: '半角空白文字' }, { value: 'J', desc: 'ひらがな(促音・拗音の小書き表記あり)' }, { value: 'G', desc: 'ひらがな(促音・拗音の小書き表記なし)' }, { value: 'Z', desc: '空白文字以外のすべての全角文字' }, { value: '^T', desc: 'サロゲートペア文字以外' }, { value: 'I', desc: 'JIS X 0208で構成された文字' }, { value: 'M', desc: 'Shift JISで構成された文字' }, { value: '^V', desc: 'IVS文字以外' }, { value: 'D', desc: '空白文字以外の2バイト文字' }, { value: 'H', desc: '空白文字以外のすべての半角文字' }, ], columns: [ { name: 'value', label: '値', width: 50 }, { name: 'desc', label: '説明', width: 350 } ], displayMemberPath: 'value', valueMemberPath: 'value', dropDownWidth: 'auto', isMultiSelect: true }); format.addEventListener(InputMan.GcComboBoxEvent.CheckedChanged, (control, args) => { gcMultiLineTextBox.setFormat(format.getCheckedValues().join('')); }); document.getElementById('setAutoConvert').addEventListener('change', (e) => { gcMultiLineTextBox.setAutoConvert(e.target.checked); });
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>複数行テキストコントロール - 書式の設定</title> <!-- SystemJS --> <script src="node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> window.onload = function() { System.import('./src/app'); } </script> </head> <body> <textarea id="gcMultiLineTextBox"></textarea> <table class="sample"> <tr> <th>文字種の設定</th> <td> <select id="format"></select> </td> </tr> <tr> <th>自動変換</th> <td> <label><input type="checkbox" id="setAutoConvert" checked>指定した文字にあわせて自動的に変換する</label> </td> </tr> </table> </body> </html>
body { padding-bottom: 10rem; }
System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, meta: { '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { '@mescius/inputman': 'npm:@mescius/inputman/index.js', '@mescius/inputman/CSS': 'npm:@mescius/inputman/CSS', 'css': 'npm:systemjs-plugin-css/css.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel/systemjs-babel-browser.js' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' }, } });