5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ILERPGAdvent Calendar 2024

Day 2

IBM iで正規表現(1)【FF RPGでの使い方】

Last updated at Posted at 2024-12-01

はじめに

皆さんは日頃、RPGで想定外の形式による入力値チェックをどのように実装されていますか?
「%CHECK」関数を使用したり、定数を定義して1つ1つ比較するなど、さまざまな方法があるかと思います。

今回はフリーフォームRPG(以下、FF RPGLE)で正規表現を使って入力値をチェック方法をご紹介します。

使用する関数

「REGEXP_COUNT」関数を使用します。

REGEXP_COUNT 関数は、ストリングで正規表現パターンが一致した回数を戻します。

FF RPGでの使い方

① メンバータイプを「SQLRPGLE」に設定
ibmiRegular1_01.png

② 「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で正規表現を使う際にバックスラッシュを扱う方法をご紹介します。

ご参考になれば幸いです。最後までお読み頂きありがとうございます。

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?