2

文字列がIPアドレスの形式であることを確認したい。あまり具体的なことは必要ありません。.文字列に3つあるかどうかを確認したいだけです。.次のようなものがあるかどうかを確認できます。

 str.include? '.'

しかし、どうすれば複数を確認でき.ますか?

ありがとう!

4

3 に答える 3

7

文字列には文字.countを取り込むメソッドがあります。

str.count('.') == 3

編集:

IP アドレスを照合しようとしているので、www.regular-expressions.infoには、正規表現を使用して IP をキャプチャする例があります。

if possible_ip_address.match(%r{\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b})
  # code here...
end

これにより、無効なアドレス (999.999.0.1 など) がキャプチャされますが、次のような誤検知が防止されます。

"not.real.ip.address".count('.') == 3 #=> true
于 2013-06-06T16:53:43.147 に答える
7

これは、「車輪を再発明しない」ケースの 1 つです。

Ruby には、IP アドレスを操作するために使用されるIPAddrクラスが付属しています。正規表現は、ターゲット IP 文字列をオクテットに解析するために使用されるクラスに含まれています。再利用IPAddr::RE_IPV4ADDRLIKE:

require 'ipaddr'
IPAddr::RE_IPV4ADDRLIKE
=> /
    \A
    (\d+) \. (\d+) \. (\d+) \. (\d+)
    \z
  /x

と により、このパターンは文字列全体に一致し\Aます\z。ここにいくつかの範囲テストがあります:

'one.two.three.four'[IPAddr::RE_IPV4ADDRLIKE]
=> nil
'1.2.3.4'[IPAddr::RE_IPV4ADDRLIKE]
=> "1.2.3.4"
'foo 1.2.3.4 bar'[IPAddr::RE_IPV4ADDRLIKE]
=> nil
'128.255.255.255'[IPAddr::RE_IPV4ADDRLIKE]
=> "128.255.255.255"
'999.999.999.999'[IPAddr::RE_IPV4ADDRLIKE]
=> "999.999.999.999"
'0000.0000.0000.0000'[IPAddr::RE_IPV4ADDRLIKE]
=> "0000.0000.0000.0000"

IP アドレスを扱うときにさらに強力な機能が必要な場合は、IPAddress gem をチェックしてください。それは非常にうれしいです。


実際に有効なIP アドレスを受け取ったかどうかを確認するには、@DarshanComputing による回答を参照してください。

于 2013-06-06T17:22:01.960 に答える