あなたの習慣について教えてください!!

IPアドレスの設定が異常でないかを判別させようと思っています。

if InStr(ipaddress, "192.168.1.1") = 0 Then

としていたのですが、これだと、192.168.1.11に設定されていた場合、引っかかってくれず困っています。

完全に一致しない場合などの比較はどうすればよいのでしょうか?


また、192.168.1.1でなく、10.1.1.1でもない場合は~のような複数個比較する場合に短く書けるのであればその記述方法もご教授いただけませんでしょうか。

A 回答 (5件)

#2です。

えーと、解決したのかな~。#1の補足を読んで自分も#3、#4のような回答をしようと思ったんだけどそれは控えて様子を見てました。

確かに#1の補足どおり読み取ると#4のような回答になる。でもね、質問者さんの過去の投稿を読むとそれぐらいはわかってるんじゃないかと思ったんですよ。たとえばQNo.4071972でやはりvbscriptの質問をされてるわけですが、その中でも文字列の比較はやってるんですよね。具体的には
> if lcase(folderitem.name) = lcase(sConPaneName) then
のあたりで。

基本のキですからね。質問者さんが訊きたいのは本当にこういうことなのか、それとも他にあるのか、正直よくわかりません。他の回答者の方も同じような思いなんじゃないかと思います。

というわけで、質問がうまく伝わってないと思うなら補足してください(解決済みならその旨を)。
    • good
    • 0

No1です。


もしかして、『AでもなくBでもない場合』について質問されてますか?
IPアドレスがどうじゃなく、単純な文字列の質問として。

以下例ではIPアドレスを address とします。
address の値は色々と変えてみて下さい。

-------------------------------------------------------
Option Explicit

Dim address
address = "192.168.1.11"


If (address <> "192.168.1.1" And address <> "10.1.1.1") Then
Call MsgBox("IPアドレスは異常です")
Else
Call MsgBox("IPアドレスは正常です")
End If
-------------------------------------------------------

If文では address が "192.168.1.1" 以外で、かつ
"10.1.1.1" 以外の場合に true となります。
メッセージには "IPアドレスは異常です" と表示しています。

IPアドレスが "192.168.1.1" もしくは "10.1.1.1" のどちらかと
完全一致する場合のみ false となり、"IPアドレスは正常です" となります。

以上でよろしいでしょうか。
    • good
    • 0

VBで完全一致なら


if ipaddress = "192.168.1.1" Then
で良いかと。
    • good
    • 0

質問からは192.168.1.1、192.168.1.11、10.1.1.1が正解なんだろうなとは思いますが、192.168.1.2が正常なのか異常なのかわかりません。

ちゃんとした回答を期待するなら、正常なIPアドレスを正確に補足するべきだと思います。連続する場合は範囲でいいです。

ということで詳細不明ですが、192.168.1.1~192.168.1.254の範囲が正常だということにして説明を続けます。

いろいろやり方はあると思うけど、今回はドット付きの10進表記をロングIPアドレスに変換して比較したらどうだろう(変換のやりかたは参考URLを参照)。

正常な範囲は192.168.1.1~192.168.1.254なのでロングIPアドレスに変換すると3232235777~3232236030になります。192.168.1.11が正常か判断するには、ロングIPに変換すると3232235787になるので、これが3232235777~3232236030の範囲にあるかを調べればいいと思います。

どうしても文字列で比較したいなら#1さんのように正規表現でやりますが。

参考URL:http://d.hatena.ne.jp/KuroNeko666/20071225/11985 …
    • good
    • 0

以下コードは、文字列"192.168.1.1"を含む文字列を


検証するサンプルコードです。

-------------------------------------------------------
Option Explicit
Dim objRE

Set objRE = CreateObject("VBScript.RegExp")
objRE.Pattern = "192.168.1.1"

If objRE.Test("192.168.1.11") Then
Call MsgBox("おぅけぃべいべぇ")
Else
Call MsgBox("おーぅのーぅ…")
End If
Set objRE = Nothing
-------------------------------------------------------

"192.168.1.1" というパターンを作成し、Testメソッドで
検証しています。この例では結果がTrueになります。

"192.168.1.1" をパターンとした場合の結果例です。
"192.168.1.1" → true
"192.168.1.11" → true
"192.168.1.2" → false

単に"192.168.1.1" と "192.168.1.11"だけを検証したいのであれば
case文で対応すれば良いかと思います。

この回答への補足

“引っかかる”の表現が悪く申し訳ありません。
期待したいのは192.168.1.1「以外」で、かつ10.1.1.1「以外」だった場合はifの中にあるコマンドを実行させたいのですが、
InStrを使うと、IPアドレスが192.168.1.11だった場合、文字として192.168.1.1が含まれているため、1文字多くても192.168.1.1と同じ動きをしてしまいます。
完全一致での文字列比較をさせる必要があるのですが、どうしたらいいのか。
というのが質問の内容です。お手数かけます

補足日時:2008/09/11 13:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報