アクセスフォームのテキストボックスにエントリを検証したいとします。テキストボックスの後ろのフィールドには、各プロジェクトレコードを識別するプロジェクト番号が格納されます。私たちは現在、テキストボックスのbefore_updateイベントの中でDo Whileループを非常に複雑にしています。しかし、私はコードを強化しています。より洗練された正規表現検証を行う方法を理解したいと思います。ここに技術的な詳細があります。VBAと正規表現を使用してアクセスプロジェクト番号フィールドを検証
プロジェクト番号には、PJ17-14-000などの標準形式があり、3つのブロックに分割され、ダッシュで区切られています。各ブロックのルールは次のとおりです。
最初のブロックはプロジェクトタイプ/会計年度ブロックです。最初の2文字は常にアルファベット文字で、異なる高水準のプロジェクトタイプを反映するように変更されます。 PJ、EL、RM、ERはいくつかの例ですが、これらは任意の2つのアルファ文字です。次の2文字は常に数値で、プロジェクトが開始された会計年度を反映します。 PJ17-14-000は、例えば、2017年度に開始されました。
2番目のブロックは、プロジェクトが確立された順序を示す番号です。したがって、PJ17-1-000は2017年度に開始された最初のPJプロジェクトです。PJ17-2-000が第2です。等々。この数字の桁数には理論的な制限はありませんが、実質的には4桁を超えることはありません。 しかし、これは重要です。先頭の数字はゼロになることはありません。したがって、PJ17-01-000などのプロジェクト番号は使用しません。この検証では、このような番号を拒否する必要があります。代わりに、アナリストは単にPJ17-1-000と入力する必要があります。
最後に、最後のブロックは常に、サブプロジェクトを表す正確に3つの数字です。ほとんどのプロジェクトは1つの部分(サブプロジェクトなし)しか持たないので、最後のブロックは000です。しかし、いくつかはサブプロジェクトが多いため、PJ17-1-001、PJ17-1-002、PJ17-1-003(そうですオン)レコード。 3番目のブロックでは、数値に先行ゼロを付けることができます(通常は行います)。
これはプロジェクト番号自体のルールです。ここでは楽しい部分があります:私たちのデータベースは、アナリストが複数のプロジェクト番号をスペースで区切ってプロジェクトフィールドに入力できるようにします。 (リンクされたテーブルとサブフォームを使用するより優れたデザインがあることは分かっていますが、これは私たちのレガシーシステムです)なぜプロジェクトには2つの数字があるのかというのは長い複雑な話ですが、それのために。したがって、プロジェクト番号フィールドには、「PJ17-1-000 ER16-143-000 PI16-23-000」などの集約プロジェクト番号が必要な場合があり(したがって、許可する必要があります)、
したがって、妥当性検査は、単一のプロジェクト番号に対して上記の規則に従う必要があり、正確に1つのスペースで区切られた任意の数のプロジェクト番号が許可されるべきです。どうすればいい?
私はvbscript.regexpで遊び始めましたが、この複雑な問題に取り組む方法を理解できませんでした。その作業を行う方法や現在の獣よりもエレガントで読みやすく/保守しやすい方法についての助けを感謝してください。
うわーそれは高速でした!私が考えなければならないことの1つは、サブプロジェクト番号のコードです。これは単なる「1桁以上」ではありません。それはちょうど3桁です。ですから、私は\ d +を\ d {3}に変更するだけでよいと思います。仕事をしているようだ。その音は正しい? –
@EmilyFTW:桁数が常に3であれば、yes、 '\ d {3}'を使用します。 –