Technical Capabilities Tech Blog

#実装方法:正規表現とモジュール化①

2021年11月29日

こんにちは、渡邉です。
今回は正規表現を使った文字列判定について、2種類の実装方法をご紹介します。

Wikipedia【正規表現】

 

その1:Reqular Expressionプロパティ

項目の[ Reqular Expression プロパティ] に正規表現を指定し、
[ Validation Failed Message プロパティ ]に正規表現の検証に失敗時に表示するエラーメッセージを指定します。

実行結果

メリット

  • プロパティ設定で完結する
  • ドメインにも指定できる為、ドメインを参照する全ての項目属性や変数に対して正規表現が有効になる 

その2:IsMatchメソッド

[ IsMatch メソッド ]は文字列がパターンに一致しているかどうかを確認し、一致している場合に[True ]を返します。
※以下のサンプルでは not が付いているので一致しない場合に [True ]を返します。

例:&pIsError = not &wChkStr.IsMatch(!’^[^ -~。-゚]+$’)

プロシージャ化サンプル

/////////////////////////////////////////////////////////////////////////////////								
// 処 理 名:正規表現チェックPC								
// 処理概要:引数で指定されたフォーマットで正規表現チェックを行う								
// 引数1:チェック文字列								
// 引数2:正規表現区分								
// 引数3:エラー判定フラグ(True:エラーあり)								
// 備考:日付チェックはうるう年や2月30日チェック等には対応していません								
//    :メールアドレスはGeneXusのMail型と同じものを使用しています。								
//    :電話番号と郵便番号はハイフンあり入力のみ許可しています。								
/////////////////////////////////////////////////////////////////////////////////

&pIsError = False								
&wChkStr = &pChkStr

//数値のみ
do case 								
	case &pMCLRGEXTYP = MCLRGEXTYP.Suuchi //数値のみ							
								
		&pIsError = not &wChkStr.IsMatch(!'^[+-]?\d+$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.HankakuAll //半角全て							
								
		&pIsError = not &wChkStr.IsMatch(!'^[ -~]+$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.HankakuEisu //半角英数のみ							
								
		&pIsError = not &wChkStr.IsMatch(!'^[a-zA-Z0-9]+$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.Zenkaku //全角のみ							
								
		&pIsError = not &wChkStr.IsMatch(!'^[^ -~。-゚]+$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.Hiduke8 //日付8桁(yyyymmdd)							
								
		&wChkStr = &wChkStr.Replace(!'/',!'')						
		&pIsError = not &wChkStr.IsMatch(!'^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.Hiduke8 //日付4桁(mmdd)							
								
		&wChkStr = &wChkStr.Replace(!'/',!'')						
		&pIsError = not &wChkStr.IsMatch(!'^(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.Denwa //電話番号							
								
		&pIsError = not &wChkStr.IsMatch(!'^0\d{2,3}-\d{1,4}-\d{4}$')						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.Mail //メールアドレス							
								
		&pIsError = not &pChkStr.IsMatch(!"^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)|(\s*))$")						
								
	case &pMCLRGEXTYP = MCLRGEXTYP.Mail //郵便番号							
								
		&pIsError = not &wChkStr.IsMatch(!'^\d{3}-\d{4}$')						
								
endcase	                     

実行結果

メリット

  • 1カ所にまとまるため正規表現による文字列チェックを1元管理できる
  • モジュール化し、他のKBでも参照可能になる

以上、 正規表現を使った文字列判定について、2種類の実装方法をご紹介 しました。
次回は 正規表現チェック のプロシージャのモジュール化についてご紹介したいと思います。

実装方法:正規表現とモジュール化②

最後までご覧頂きありがとうございました。

Tech Blog一覧