2010-09-20 33 views
26

Trong Rails 3, có phương thức tích hợp nào để xem chuỗi có phải là địa chỉ IP hợp lệ không?Rails 3: Hợp lệ hóa chuỗi IP

Nếu không, cách dễ nhất để xác thực là gì?

+0

Tôi đang nói IP4 đây. – Dex

Trả lời

0

tôi không biết nhiều về RoR, nhưng nếu bạn không tìm thấy bất kỳ phương thức tích hợp nào để xác thực địa chỉ IP.

Hãy thử vào biểu thức chính quy này:

"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$" 

để xác nhận địa chỉ IP.

Gần đây tôi đã sử dụng nó trong một mô-đun để có nó trên máy tính để bàn.

0

Bạn nên sử dụng một Regular Expression

Dưới đây là một trong đó làm những gì bạn muốn:

/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\. 
([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/.match("#{@systemIP}") 
59

Chỉ muốn thêm instea đó d viết mẫu riêng của bạn, bạn có thể sử dụng xây dựng trong một Resolv::IPv4::Regex

require 'resolv' 

validates :gateway, :presence => true, :uniqueness => true, 
    :format => { :with => Resolv::IPv4::Regex } 
+0

Không chắc chắn khi nào họ thêm tính năng này, nhưng điều này dễ hơn rất nhiều – Dex

+1

Có điều này dễ dàng hơn nhiều. @Dex nó đã được khoảng từ ít nhất ruby ​​1.9.2 – WarmWaffles

+0

Tôi có thể xác nhận [nó trong Ruby 1.8.7] (http://ruby-doc.org/stdlib-1.8.7/libdoc/resolv/rdoc/Resolv/IPv4 .html) – dukedave

1

Bạn có thể sử dụng Resolv::IPv4::Regex như Jack đề cập dưới đây nếu bạn không cần phải chấp nhận subnet.

Nếu bạn cần chấp nhận, activemodel-ipaddr_validator đá quý có thể giúp bạn. (từ chối trách nhiệm: Tôi là tác giả của đá quý)

validates :your_attr, ipaddr: true 
+0

Hoạt động tốt. Có lẽ đáng để thêm tuyên bố từ chối trách nhiệm rằng đó là _your_ gem. – Shadwell

2

Bạn cũng có thể chỉ cần gọi thư viện chuẩn của IPAddr.new mà sẽ phân tích subnet, IPV6 và điều thú vị khác: (IPAddr) và trở nil nếu định dạng đã sai.

Chỉ cần làm:

valid = !(IPAddr.new('192.168.2.0/24') rescue nil).nil? 
#=> true 

valid = !(IPAddr.new('192.168.2.256') rescue nil).nil? 
#=> false 
Các vấn đề liên quan