2007年03月10日

正規表現で「1から99」であることをチェックする

・アラッポ・カーロの備忘録 - 正規表現で(よく調べもせずに)失敗
http://d.hatena.ne.jp/ArappoCaro/20070309/1173448976

上記サイトで「1から99までの数値入力のバリデーション用正規表現」
が紹介されていました。
\d[1,2]

とかいてありましたが
\d{1,2}

のことでしょうかね?VB.NETでの正規表現らしいのですが、
これがあってるのか分からないので自分でも考えてみること
にしました。


少し回りくどいですが、お付き合いください。

私の方ではJavaScriptでの正規表現を基準にします。

まず単純に
\d{1,2}

「10進数の数字が1回以上2以下続くパターンを含む」です。
これだと「abc99xyz」も上記パターンを含むのでマッチ
してしまいます。
なので全体をメタ文字「^」と「$」で囲ってあげます。
^\d{1,2}$

で「10進数の数字が1回以上2以下続くパターンのみ」になります。

はてさて、これでいいのでしょうか?
これだと「0」も「00」もマッチしてしまいますね。

検証するために「Rex V」というサイトを使用しました。
(AJAXで使用感いいですよ。)

regex1.jpg

赤い文字がマッチしたこと示しています。やはり「0」も「00」
マッチしてしまいました。ひと工夫必要そうです。
では
^[1-9][0-9]?$

はどうでしょう。

regex2.jpg

いい感じです。これで「1から99」であることをチェックできる
のではないでしょうか。
※あえて「\d」ではなく「[0-9]」を使用しています。意味は同じです。


もし0パディングありの「01から09」もマッチさせたいなら
(もちろん「00」は除く)
^[1-9][0-9]?$|^0[1-9]$

でしょうかね。

regex3.jpg

orで「01から09」までのパターンを追加してあげました。


【2007/03/11 追記】
0パディングありもマッチさせたい場合ですが、
^([1-9][0-9]?|0[1-9])$

のほうがまだスマートですね。
「^」と「$」の組みが複数あったの見にくかったかも。



posted by webdev at 13:48| Comment(0) | TrackBack(0) | 一般 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。