正規表現で(よく調べもせずに)失敗
10から99までの数値入力のバリデーション用正規表現を次のように失敗しました。どうも正規表現は苦手です。苦手ならちゃんと調べればいいのに直感で対応するからいけないのですね。
\d{2} ↓ [1-99] ↓ \d{1,2}でOK
webdevjpさんのトラックバックにより追記
自分のめものつもりで、あまりバックグランドも書かない記述でしたのに、詳細に反応していただきありがとうございました。いくつかの誤り訂正と条件を追加させていただきます。
・「1から99」はうそで実際は、「0から99」でした。 ・ 1桁の数値はゼロ埋め有り無しどちらも有効なパターンです。 ・「\d[1,2]」は、「\d{1,2}」の単純な誤りでしたm(_ _)m実際は「\d{1,2}」を利用してます。 ・ 正確にはASP.NET(VB)ですね
さらに、これは、正規化とかの範囲外ですが、該当入力コントロールの入力桁数の最大値を2桁に制約しています。また、アルファベットの問題ですが.NETのバリデーションコントロールを使用しているからかもしれませんが、記述でも問題がないようですが、正確には"^(" と ")$"で囲んだ方が部分一致の問題が発生する可能性がなくなりますね。.NETによるサンプルパターンでも使用されていないのでフレームワーク上で対処されているのかな?でもRegularExpressionValidator.ValidationExpression プロパティには下記の記述もあるのでどうなっているのでしょうね。
部分一致式で問題が発生した場合は、式を "^(" と ")$" で囲んでみてください。たとえば、"a|ab" の場合は、"^(a|ab)$" のようにします。
webdevjpさんの模範回答「^[1-9][0-9]?$|^0[1-9]$」正規表現としては正解なのでしょうね。この記号羅列の感覚が私みたいな人を正規表現苦手にしてしまうのでしょうね。それとも年のせいかな、大昔ラインエディタしか利用できないときは普通に使用していたような気もします。
今回、webdevjpさんのおかげで勉強になりました。ありがとうございました。