2010/01/16

「正規表現パターン」の表現力

「ある入力項目の制約は、数字2桁から4桁、もしくは空欄」の仕様でコーディングするとき
if( (2<=x.length && x.length<=4) || x.trim().length==0)) xxx;
としているのが多いかと思います。
これを、正規表現パターンで書くと「^$|^\d{2,4}$」となります。
if( (new Regex("^$|^\d{2,4}$")).IsMatch(s)) xxx
と記述でき、シンプルになります。
仕様書の記述は、「この項目の条件は "^$|^\d{2,4}$"とする」とすればシンプルです。

理解を得るのは困難な現実があります。「正規表現パターン」が読めないというのが理由のようです。
コーディングもRegex判定でなく、ベタ書きを推奨されたりします。
でも、この程度の表現は読んで欲しいものです。
SQLの世界でも言えますが、入り組んだ構文が「読めない」という理由で却下されるのは理不尽さを覚えます。

尤も慣れの問題で、どちらが読み易いかになるかとは思うのですが、より複雑な条件が加わった時、判断式が増えるよりもパターン式更新する方が楽だと思います。

0 件のコメント:

コメントを投稿