RegexpMatchで文字列が正規表現に一致するか検証する

ウェブフォームでユーザーが入力した電話番号の形式が正しいか検証したいことってありますよね?RegexpMatch関数を使用すると、入力した文字列が指定した正規表現パターンと一致するか評価して正しい文字列かを確認することができます。

この記事では、RegexpMatch関数の使用例を紹介します。 

正規表現パターンを作成する

まず最初に、簡単な正規表現を試してみましょう。例としてファイル名の拡張子が".png"かどうかをチェックしてみます。

RegexpMatch関数をダブルクリックして、正規表現ダイアログを表示します。「正規表現」ボックスに、.png拡張子のファイル名に一致する次の正規表現パターンを入力します。

.*\.png$

regexpmatch001.png

正規表現パターンのテスト

パターンをテストするために、「入力文字列」ボックスに"screenshot1.png"と入力します。

rm002.png

「テスト」をクリックします。「実行結果」ボックスには "true"が表示されます。

regexpmatch003.png

もし入力文字列がパターンと一致しない場合、「実行結果」ボックスには "false"が表示されます。

正規表現パターンの「.*\.png$」は分解すると次のようなパターンを表しています。
「.*」:どのような文字が何個でもを表すパターン
「\.」:「.」自体を表すパターン
「png」:そのまま「png」を表すパターン
「$」:入力文字列の最後を表すパターン
つまり、入力文字列の最後が「.png」となっている文字列という意味になります。

大文字小文字のマッチング

入力文字列の大文字小文字が正規表現のパターンと一致していない場合でもパターンとマッチしたと判定したい時もありますね。デフォルトでは、RegexpMatch関数は大文字小文字を区別するので、すべて大文字の"PHOTO.PNG"のようなファイル名は、先ほどの正規表現のパターンにマッチしません。なぜなら先ほど指定したパターンは拡張子部分が「.png」と小文字になっているため、すべて大文字の「.PNG」とはマッチせずに"false"になってしまうのです。大文字小文字を無視するには、正規表現ダイアログの左下にあるその他のプロパティペインで「大文字小文字の区別」プロパティを「区別しない」に設定します。

regexpmatch004.png

それでは大文字小文字が区別されなくなったかテストしてみましょう。入力文字列に"PHOTO.PNG"と入力します。

rm100.png

「テスト」をクリックすると「実行結果」ボックスには "true"が表示されます。

rm101.png

大文字小文字が違っていても今回はマッチするようになりました。

正規表現のサンプルパターンを使用する

正規表現ダイアログは、右下のサンプルペインでカテゴリーを選択してサンプルのリストからよく使われる正規表現パターンを選択することができます。

例えばメールアドレスのパターンを使用したい場合は、「汎用」を選択し、「メールアドレス」を選択します。

regexpmatch006.png

「正規表現」ボックスには選択したサンプルパターンが表示されます。

regexpmatch007.png

サンプルペインで選択できるサンプルパターンでよく使うものは次のとおりです。

カテゴリ パターン 説明
数字 数字 数字にマッチします。
数字桁数指定(固定) 指定した桁数の数字にマッチします。
文字種 ASCII ASCII文字にマッチします。
ひらがな ひらがなにマッチします。
汎用 日付 年/月/日の日付文字列にマッチします。
電話番号 日本の電話番号にマッチします。
郵便番号 日本の郵便番号にマッチします。
メールアドレス メールアドレスにマッチします。
URL http://で始まるHTTPアドレスにマッチします。

新しい正規表現のサンプルパターンを作成する

サンプルペインに使用したい正規表現パターンがない場合、新しい正規表現パターンを作成して利用することができます。正規表現の選択リストは単純なCSV形式のテキストデータなので独自にカスタマイズすることが可能です。今回は米国の電話番号のパターンを追加してみましょう。米国の電話番号って馴染みないでが実はこれは後ほど使用するので例として挙げています。

サンプルペインの上部にある「サンプルの編集」をクリックします。

regexpmatch008.png

デフォルトのテキストエディターが起動します。任意の行に新しいサンプルパターンを追加します。今回の例として使用する米国の電話番号のパターンです。

^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$

テキストエディターでファイルを保存します。正規表現ダイアログに戻ると、追加したサンプルパターンが指定したカテゴリーに表示されています。カスタムしたサンプルパターンを選択すれば「正規表現」ボックスに設定されます。

regexpmatch009.png

正規表現パターンを動的に設定する

入力の値を検証する時に、正規表現パターンを変更しなければならないことがあります。たとえば、ユーザーがウェブフォームで電話番号を入力した時に、入力文字列を検証したいとします。電話番号の形式は国によって変わるため、電話番号の検証に使用する正規表現パターンも国ごとに変更する必要があります。

今回は日本と米国の電話番号のパターンで検証してみます。国名をキーにしてTable関数で電話番号の正規表現パターンを取得し、RegexpMatch関数の「正規表現」プロパティの値を変更します。

次のレコードをMapperコンポーネントに接続します。このレコードには、ウェブフォームで入力した値が格納されているとします。

名前 電話番号 住所 国名
山田 太郎 03-1234-5678 東京都渋谷区 日本

 

検証する文字列を指定するために、電話番号フィールドをRegexpMatch関数にリンクします。

rm201.png

Table関数を追加し、国名フィールドをTable関数の入力にリンクします。

rm202.png

Table関数に指定するテーブルは次のようになります。テーブルの指定方法は、Tableを使用したキーによる値の選択をご覧ください。

国名 正規表現パターン Table関数に指定する正規表現パターン
日本 ^\d{2,4}-\d{2,4}-\d{4}$ ^\\d{2,4}-\\d{2,4}-\\d{4}$
米国 ^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$ ^\\(?[0-9]{3}\\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$

※ Table関数では "\" は "\\" と記述する必要があります。

Table関数の出力をRegexpMatch関数にリンクします。

rm203.png

RegexpMatch関数の「正規表現」プロパティを動的に設定するために、Table関数を「入力2」プロパティにリンクする必要があります。RegexpMatch関数をクリックすると「リンク」プロパティにリンクされたフィールドが表示されます。「入力2」が"Table1"となっていることを確認してください。このとき、自動的に「正規表現」プロパティに"Table1"が設定されていることも確認できます。

regexpmatch.png

フローを実行すると、国名が"日本"なので、Table関数は日本の電話番号パターン"^\d{2,4}-\d{2,4}-\d{4}$"を出力します。RegexpMatch関数は、入力文字列"03-1234-5678"がこのパターンにマッチするかどうかをチェックし、今回は"true"が出力されます。つまり、入力された電話番号は日本の電話番号として有効な形式です。

入力された国名が"米国"であれば、Table関数は米国の電話番号パターンを出力し、RegexpMatch関数は入力文字列がこのパターンにマッチするかどうかをチェックします。

このようにRegexpMatch関数を使用すれば、文字列の形式が正規表現にマッチするかどうかを検証することができます。正規表現サンプルパターンによく使うパターンを保存して再利用すれば、より効率的にRegexpMatch関数を設定することができますね。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

他のキーワードで検索する