正規表現を使った、IPv4アドレスかどうかの判定
亜 2013/4/3(Wed) 19:15:52|NO.53403
題名の通り、正規表現を使って、"対象文字がIPv4アドレス(111.222.111.222形式)かどうかを判定"させたい
のですが、HSPで正規表現って使えますか?
k5342 2013/4/3(Wed) 19:18:57|NO.53404
mod_regexpというモジュールをインクルードすることで正規表現は利用可能です
KA 2013/4/3(Wed) 20:48:22|NO.53407
正規表現を使うまでもなく、数値範囲で判断した方が使いやすいでしょう。
inovia 2013/4/3(Wed) 21:08:03|NO.53408
こういう判定方法もあります。
http://chokuto.ifdef.jp/advanced/function/inet_addr.html
#uselib "ws2_32.DLL"
#cfunc inet_addr "inet_addr" str
ip = "111.222.111.222", "0:0:0:0:0:0:0:1", "hsp.tv", "0.O.0.O"
repeat length(ip)
mes ip(cnt)
if inet_addr(ip(cnt)) == -1{
mes "IPv4アドレスではない\n"
}else{
mes "IPv4アドレスです\n"
}
loop
亜 2013/4/3(Wed) 22:36:54|NO.53413
>k5342さん
調べてみます、ありがとうございます。
>KAさん
確かに、以前までは.で区切って4つの数字をstr(int())して比較していました
でも、時々0002.3.7.009 とかを入力する方がいましてw
>inoviaさん
すごく便利ですね!使わせていただきます
ありがとうございます
inet_addr(ip(cnt)) == -1
この-1はエラーということで、0xFFFFFFFFのことなのでしょうか。
GENKI 2013/4/3(Wed) 22:54:27|NO.53414
正規表現だとこんな感じかな?
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$
inovia 2013/4/3(Wed) 22:55:54|NO.53415
>この-1はエラーということで、0xFFFFFFFFのことなのでしょうか。
HSPの整数型は符号付き32bitとして扱われるので、0xFFFFFFFF = -1 となります。
mes 0xFFFFFFFF
すると-1と返ってくるのが分かるかと。
晩御飯 2013/4/3(Wed) 22:59:50|NO.53417
もう少し縮められないこともない
^(\d{1,3})(\.(\d{1,3}){3})$