C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 正規表現でのエラーチェック-99.99〜99.99


(過去ログ 87 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■51708 / inTopicNo.1)  正規表現でのエラーチェック-99.99〜99.99
  
□投稿者/ いの (1回)-(2010/07/14(Wed) 17:45:43)

分類:[.NET 全般] 

正規表現でのエラーチェック

以下を設定したのですが
^[+-]?[0-9]{1,2}[.]?[0-9]{0,3}$

1234がOKになります。
カンマの前は2桁までと指定しているのですが、うーん何故でしょうか?

私としては-99.999〜99.999までを入力範囲にしたいのですが
どうも結果が芳しくありません。(さらにゼロもエラーに出るとなお良し)

助言頂けると助かります。
引用返信 編集キー/
■51709 / inTopicNo.2)  Re[1]: 正規表現でのエラーチェック-99.99〜99.99
□投稿者/ 魔界の仮面弁士 (1706回)-(2010/07/14(Wed) 17:58:19)
2010/07/14(Wed) 18:33:42 編集(投稿者)

No51708 (いの さん) に返信
> カンマの前は2桁までと指定しているのですが、うーん何故でしょうか?
上記は小数点記号「.」の事ですよね? 日英米で
カンマ(comma)と言えば、「,」の事になってしまうハズ。

> ^[+-]?[0-9]{1,2}[.]?[0-9]{0,3}$
> 1234がOKになります。
? は {0,1} を意味しますので、「.」の無い "1234" もヒットするかと。
引用返信 編集キー/
■51711 / inTopicNo.3)  Re[1]: 正規表現でのエラーチェック-99.99〜99.99
□投稿者/ 魔界の仮面弁士 (1707回)-(2010/07/14(Wed) 18:16:28)
No51708 (いの さん) に返信
> 私としては-99.999〜99.999までを入力範囲にしたいのですが
JScript の正規表現リテラルでテストしただけで、.NET では未検証ですが、
^[+-]?[1-9]?[0-9]($|[.][0-9]{0,4}$)
でどうでしょう。"1234" や "01.2345" は NG としています。

> どうも結果が芳しくありません。(さらにゼロもエラーに出るとなお良し)
0 だけでなく、-0 も 0.00 も +0.0000 も NG でしょうか?
引用返信 編集キー/
■51727 / inTopicNo.4)  Re[2]: 正規表現でのエラーチェック-99.99〜99.99
□投稿者/ いの (2回)-(2010/07/15(Thu) 09:10:35)
No51711 (魔界の仮面弁士 さん) に返信
> ■No51708 (いの さん) に返信
>>私としては-99.999〜99.999までを入力範囲にしたいのですが
> JScript の正規表現リテラルでテストしただけで、.NET では未検証ですが、
> ^[+-]?[1-9]?[0-9]($|[.][0-9]{0,4}$)
> でどうでしょう。"1234" や "01.2345" は NG としています。
>

うまく行きますね。
なるほど。(|)で条件を分けれるのですね
参考になります。ありがとうございます。

>>どうも結果が芳しくありません。(さらにゼロもエラーに出るとなお良し)
> 0 だけでなく、-0 も 0.00 も +0.0000 も NG でしょうか?

そうなんですよね、全てゼロとしてエラーにしたいのですが
これもちょっと頑張ってみたのですが、パターンが限りなくありますよね
やはり難しいのでしょうか?

引用返信 編集キー/
■51729 / inTopicNo.5)  Re[2]: 正規表現でのエラーチェック-99.99〜99.99
□投稿者/ よねKEN (542回)-(2010/07/15(Thu) 09:38:32)
よねKEN さんの Web サイト
No51711 (魔界の仮面弁士 さん) に返信
> ^[+-]?[1-9]?[0-9]($|[.][0-9]{0,4}$)

動作検証はしていませんが「12.」や「12.1234」みたいのもOKになりませんか?


^[+-]?[1-9]?[0-9](\.[0-9]{1,3})?$

こんなんでどうでしょう。

> そうなんですよね、全てゼロとしてエラーにしたいのですが

正規表現でなくてもよければ、数値のチェックをした後に数値化して0かどうか判断するのが簡単でしょう。
1つの正規表現でなくてよければ、上記の正規表現でチェックした上で、

^[+-]?0(\.0{1,3})?$

の正規表現でチェックして該当したら除外とか。

1つの正規表現の中でも強引にやればできるとは思いますが、
あまりキレイな形にはならないので、保守性が悪いかと思います。


引用返信 編集キー/
■51735 / inTopicNo.6)  Re[3]: 正規表現でのエラーチェック-99.99〜99.99
□投稿者/ いの (3回)-(2010/07/15(Thu) 11:19:00)
No51729 (よねKEN さん) に返信
> ■No51711 (魔界の仮面弁士 さん) に返信
>>^[+-]?[1-9]?[0-9]($|[.][0-9]{0,4}$)
>
> 動作検証はしていませんが「12.」や「12.1234」みたいのもOKになりませんか?
>
>
> ^[+-]?[1-9]?[0-9](\.[0-9]{1,3})?$
>
> こんなんでどうでしょう。
>
>>そうなんですよね、全てゼロとしてエラーにしたいのですが
>
> 正規表現でなくてもよければ、数値のチェックをした後に数値化して0かどうか判断するのが簡単でしょう。
> 1つの正規表現でなくてよければ、上記の正規表現でチェックした上で、
>
> ^[+-]?0(\.0{1,3})?$
>
> の正規表現でチェックして該当したら除外とか。
>
> 1つの正規表現の中でも強引にやればできるとは思いますが、
> あまりキレイな形にはならないので、保守性が悪いかと思います。
>
>

色々、ご指摘ありがとうございます。

「\.」という表現がどうも意味がわからないのですが
これは何を指定しているのでしょうか?


引用返信 編集キー/
■51739 / inTopicNo.7)  Re[4]: 正規表現でのエラーチェック-99.99〜99.99
□投稿者/ よねKEN (544回)-(2010/07/15(Thu) 12:19:29)
よねKEN さんの Web サイト
No51735 (いの さん) に返信
> 「\.」という表現がどうも意味がわからないのですが
> これは何を指定しているのでしょうか?

「\」はエスケープの指定です。
正規表現中で「.」は特別な意味を持っていますが、
単なる文字としての「.」を意図する場合は「\.」と指定します。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -