- PR -

正規表現で数値のみチェック

投稿者投稿内容
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-13 09:59
引用:

R・田中一郎さんの書き込み (2005-12-13 09:24) より:
^-?[0-9]*.?[0-9]*$



うーんと、ご自分の書かれた正規表現が何を表すのか良く理解された方が良いですよ。
私は文章にして確認するようにしています。R・田中一郎さんの書かれたものは

先頭から
-が0回か1回あって
[0-9]が0回以上あって
.が0回か1回あって
[0-9]が0回以上あって
終わる文字列

になってますよ。"-",".","-."なんかは流石にNGじゃないですか?

#おぉ、考えが足りてない。オールマッチじゃんか。

[ メッセージ編集済み 編集者: でっち6号 編集日時 2005-12-13 10:33 ]
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-12-13 10:17
^-?[0-9]*.?[0-9]*$

この正規表現だと



のような文字列がOKになりますが
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-12-13 10:40
引用:

明智重蔵さんの書き込み (2005-12-13 10:17) より:
^-?[0-9]*.?[0-9]*$

この正規表現だと



のような文字列がOKになりますが




^-?[0-9]*.?[0-9]+$

の間違いでした。ごめんなさい。
でも、正直なところ、どうして + が * だと「あ」が通ったのかが理解できませんでした。
たつ64
会議室デビュー日: 2005/08/02
投稿数: 16
お住まい・勤務地: 天下の台所?
投稿日時: 2005-12-13 11:18
いや、そうじゃなくて「.」です。
エスケープしないと…。
「正規表現言語要素」を確認してみてください。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-12-13 15:23
引用:

たつ64さんの書き込み (2005-12-13 11:18) より:

いや、そうじゃなくて「.」です。
エスケープしないと…。




こうですか?

^-?[0-9]*\.?[0-9]+$
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-12-13 19:30
入力なしが通るね

小数点だけも ok か。
小数点で終わるのも、通っちゃうね。

http://www.atmarkit.co.jp/fdotnet/index/bbs/dir105.html

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-12-13 19:32 ]


すみません。最後の '*' が、'+' に変わっていることに気がついていませんでした。

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-12-14 22:11 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-12-14 09:19
引用:

Jittaさんの書き込み (2005-12-13 19:30) より:
入力なしが通るね

小数点だけも ok か。
小数点で終わるのも、通っちゃうね。



以下のように確認してみたのですが正しく動作しましたよ?

コード:
private sub テスト()
    MessageBox.Show(CType(数値だ(""), String))
    MessageBox.Show(CType(数値だ("."), String))
    MessageBox.Show(CType(数値だ("5."), String))
    MessageBox.Show(CType(数値だ(".5"), String))
End Sub

Private Function 数値だ(ByVal 文字列 As String) As Boolean
    Dim meta As String = "^-?[0-9]*\\\\.?[0-9]+$"
    Dim regex As New System.Text.RegularExpressions.Regex(meta)
    Dim m As System.Text.RegularExpressions.Match = regex.Match(文字列)
    Return m.Success
End Function



結果は、False, False, False, True でした。

引用:

Jittaさんの書き込み (2005-12-13 19:30) より:

http://www.atmarkit.co.jp/fdotnet/index/bbs/dir105.html



ここでは、

^[-+]?[0-9]*\\\\.?[0-9]+$

になってますね。
これだと、+1 も数値としてみなされる訳ですね。
その他は、皆さんに教わりながら修正したのと一緒です。

スキルアップ/キャリアアップ(JOB@IT)