はじめに
皆さんは日頃、RPGで想定外の形式による入力値チェックをどのように実装されていますか?
「%CHECK」関数を使用したり、定数を定義して1つ1つ比較するなど、さまざまな方法があるかと思います。
今回はフリーフォームRPG(以下、FF RPGLE)で正規表現を使って入力値をチェック方法をご紹介します。
使用する関数
「REGEXP_COUNT」関数を使用します。
REGEXP_COUNT 関数は、ストリングで正規表現パターンが一致した回数を戻します。
FF RPGでの使い方
② 「REGEXP_COUNT」関数を使用して、入力値が正規表現パターンとマッチした回数を取得
(サンプルコードのINPUT
は画面から入力される値です。)
COUNT = *ZERO;
REGEX = '[^0-9]'; //0から9以外の文字
EXEC SQL
Set :COUNT = REGEXP_COUNT(TRIM(:INPUT), :REGEX);
③ 入力値が正規表現パターンとマッチした場合(もしくはマッチしなかった場合)の処理を記述
IF COUNT > *ZERO;
// 入力値が正規表現パターンとマッチした場合の処理を記述
ENDIF;
おわりに
IBM iで正規表現を使用する際、1つ問題があります。
それは、IBM iでは「\(バックスラッシュ)」が「¥(円マーク)」として認識されることです。
そのため、本記事のサンプルコードのように入力値を数字のみに限定したい場合でも、「半角数字の0〜9」を表す「\d」を使用できません。
その代わりに[^0-9]を使って「0から9以外の文字」にマッチさせる方法を取っています。
これにより、数字以外が入力された場合はエラー処理を実行しています。
次回の記事では、IBM iで正規表現を使う際にバックスラッシュを扱う方法をご紹介します。
ご参考になれば幸いです。最後までお読み頂きありがとうございます。