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ì?
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ì?
Các Rails cách để xác nhận với ActiveRecord trong Rails 3:
@ip_regex = /^([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}$/
validates :gateway,
:presence => true,
:uniqueness => true,
:format => { :with => @ip_regex }
Tài nguyên tốt tại đây: http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
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.
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}")
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 }
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
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
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
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
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
Bạn cũng có thể sử dụng Regexy::Web::IPv4 có thể khớp với địa chỉ IP với số cổng.
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
Tôi đang nói IP4 đây. – Dex