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

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

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

Re[4]: 正規表現 [1]


(過去ログ 53 を表示中)

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

■29576 / inTopicNo.21)  Re[15]: 正規表現
  
□投稿者/ ヤンサン (11回)-(2008/12/10(Wed) 20:43:11)
>double に Parse
>ToString() して、元の文字列と比較 → 異なっていたら NG

の具体的な実装例を示してはいただけませんか?
引用返信 編集キー/
■29578 / inTopicNo.22)  Re[16]: 正規表現
□投稿者/ よねKEN (224回)-(2008/12/10(Wed) 22:00:39)
2008/12/10(Wed) 22:17:23 編集(投稿者)

No29576 (ヤンサン さん) に返信
> >double に Parse
> >ToString() して、元の文字列と比較 → 異なっていたら NG

○パターン1 →チェックしたいデータが"002"
(1)数字の"002"→(2)数値の2→(3)数字の"2"

○パターン2 → チェックしたいデータが"-0"
(1)数字の"-0"→(2)数値の0→(3)数字の"0"

(1)と(3)の文字列が違うということはNGですよね?

こういうことかと思います。
この流れを実現するために、最初の→では、System.Double.Parseメソッドなどの出番で、
後の→ではToStringメソッドの出番です。


引用返信 編集キー/
■29579 / inTopicNo.23)  Re[16]: 正規表現
□投稿者/ 魔界の仮面弁士 (944回)-(2008/12/10(Wed) 22:31:27)
No29576 (ヤンサン さん) に返信
> >double に Parse
> >ToString() して、元の文字列と比較 → 異なっていたら NG

double ではマズイかと。桁数が保持されないので、たとえば、
"1.10" は "1.1" という文字列になり、NG と判定されかねません。
 double a = double.Parse("1.10");
 double b = double.Parse("1.1");

 string s1 = a.ToString(); // "1.1"
 string s2 = b.ToString(); // "1.1"


みきぬさん( No29539 )が書かれていたように、decimal の方が良いんじゃないかな?
 decimal a = decimal.Parse("1.10");
 decimal b = decimal.Parse("1.1");

 string s1 = a.ToString(); // "1.10"
 string s2 = b.ToString(); // "1.1"



なお今回のパターンは、double を使うにせよ decimal を使うにせよ、
Parse/TryPase だけでは検証しきれないと思うので(NumberStyles を指定したとしても)、
正規表現によるチェックと、数値範囲のチェックの両方を行う事をおすすめします。

引用返信 編集キー/
■29580 / inTopicNo.24)  Re[4]: 正規表現
□投稿者/ よねKEN (225回)-(2008/12/10(Wed) 23:32:36)
2008/12/10(Wed) 23:34:16 編集(投稿者)
No29536 の正規表現で一か所間違いを見つけましたorz
整数部0の小数のチェック部分で、小数部2桁のパターンだけに対応する形になっていたため、
例えば0.1でマッチしないになってました。

>     string s = 
>         @"^(-?(1000(\.0{1,2})?|[1-9][0-9]{0,2}(\.[0-9]{1,2})?|0\.([1-9][0-9]|[0-9][1-9]))|0(\.0{1,2})?)$";

         @"^(-?(1000(\.0{1,2})?|[1-9][0-9]{0,2}(\.[0-9]{1,2})?|0\.([1-9][0-9]?|[0-9][1-9]))|0(\.0{1,2})?)$";
                                                                             ~

のように修正(~の箇所の「?」を追加)すれば、この間違いについては大丈夫だと思います。

こういう凡ミスをしていても、このくらいの複雑さになるだけで簡単に見落としてしまうので、
単純な正規表現で済まないような条件では正規表現の使用は個人的に避けますね。


@"^-?[0-9]{1,4}(\.[0-9]{1,2})?$";

というような正規表現で、
-9999.99〜9999.99の範囲の数値表現(ただし-0や002のようなパターンは許容される)である
ことだけをチェックする部分に正規表現を用いるのがよいかなと思います。

引用返信 編集キー/
■29586 / inTopicNo.25)  Re[17]: 正規表現
□投稿者/ .SHO (373回)-(2008/12/11(Thu) 09:47:22)
> 正規表現によるチェックと、数値範囲のチェックの両方を行う事をおすすめします。

最初にこう書いたのになぁ…^^;
コピペだけで完全に動くソースを提示しないと解決にならない気がしてきた。

引用返信 編集キー/
■29587 / inTopicNo.26)  Re[18]: 正規表現
□投稿者/ みきぬ (291回)-(2008/12/11(Thu) 10:05:35)
No29586 (.SHO さん) に返信
> コピペだけで完全に動くソースを提示しないと解決にならない気がしてきた。
>

 (三三>
('(゚∀゚∩ だがことわるよ!

引用返信 編集キー/
■29588 / inTopicNo.27)  Re[19]: 正規表現
□投稿者/ .SHO (374回)-(2008/12/11(Thu) 10:13:11)
>  (三三>
> ('(゚∀゚∩ だがことわるよ!

自分もパスです!
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

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

管理者用

- Child Tree -