SonicOS 7 ルールとポリシー --- TZ シリーズ用

一致オブジェクトでの正規表現の作成

定義済みの正規表現を設定時に選択できます。また、個別正規表現を設定することもできます。この使用事例では、クレジットカード番号の Regex 一致オブジェクトの作成方法を説明しつつ、いくつかの一般的なエラーについても示します。

例えば、次の非効率的で少し間違った構文を使用して、クレジットカード番号に対する Regex 一致オブジェクトを作成するとします。

[1-9][0-9]{3} ?[0-9]{4} ?[0-9]{4} ?[0-9]{4}

ユーザはこのオブジェクトを使用してポリシーを作成しようとします。ユーザが「OK」をクリックすると、装置には "お待ちください…" というメッセージが表示されますが、管理セッションが非常に長時間無反応になり、結果的に正規表現が拒否されることがあります。

このような動作の原因は、個別オブジェクトとファイル内容一致オブジェクトでは、正規表現の前に暗黙的にドットとアスタリスク (.*) が付くことです。ドットは、'\n' を除く 256 文字の ASCII 文字すべてに一致します。このことや、使用されている一致オブジェクト種別や、正規表現の性質が相まって、制御プレーンが必要なデータ構造をコンパイルするのに長い時間がかかります。

解決策は、正規表現の前に '\D' を付けることです。これは、クレジットカード番号の前に数字以外の文字が付き、実際に正規表現がより正確になるということを意味します。

さらに、上記の正規表現は、対象のクレジットカード番号を必ずしも正確に表していません。現在の形の正規表現では、1234 12341234 1234 など、いくつかの誤検出に一致する可能性があります。より正確な表現は以下のようになります。

\D[1-9][0-9]{3} [0-9]{4} [0-9]{4} [0-9]{4}

または

\D[1-9][0-9]{3}[0-9]{4}[0-9]{4}[0-9]{4}

より簡潔な表現は、それぞれ

\D\z\d{3}( \d{4}){3}

または

\D\z\d{3}(\d{4}){3}

となります。

これらは、1 つの一致オブジェクトの中に 2 つの正規表現として記述することも、以下のように 1 つの正規表現に圧縮することもできます。

\D\z\d{3}(( \d{4}){3}|(\d{12}))

次の正規表現を使用して、数字が '-' で区切られたクレジットカード番号をキャプチャすることもできます。

\D\z\d{3}(( \d{4}){3}|(-\d{4}){3}||(\d{12}))

先行する '\D' は、これらすべての正規表現に含める必要があります。

Was This Article Helpful?

Help us to improve our support portal

Techdocs Article Helpful form

  • Hidden
  • Hidden

Techdocs Article NOT Helpful form

  • Still can't find what you're looking for? Try our knowledge base or ask our community for more help.
  • Hidden
  • Hidden