Как вы проверяете почтовый индекс U.S. с помощью Rails?
Я написал что-то вроде этого, но это не работает:
validates_format_of :zip_code,
:with => /^\d{5}(-\d{4})?$/,
:message => "Zip code should be valid"
Как вы проверяете почтовый индекс U.S. с помощью Rails?
Я написал что-то вроде этого, но это не работает:
validates_format_of :zip_code,
:with => /^\d{5}(-\d{4})?$/,
:message => "Zip code should be valid"
Вы также можете проверить, что на самом деле это действительный почтовый индекс (а не только формат, но сам zip), используя:
http://www.webservicex.net/uszip.asmx?op=GetInfoByZIP
Попробуйте использовать действующий почтовый индекс, например, 02135 против недопустимого значения, например, 09990, чтобы увидеть разницу.
Я бы подумал об объединении этого с:
validates_format_of :zip, :with => /^\d{5}(-\d{4})?$/, :message => "should be in the form 12345 or 12345-1234"
что он сделал с validate_format_of
, а не validate_format_of_zip_code
, поскольку это означает, что он также может использоваться для телефонных номеров и т.д., которые также соответствуют фиксированному известному формату (например, США).
Возможно, сначала проверьте формат и дайте ошибку, если это недействительно, поэтому обрабатывайте все это в рельсах со стандартным флэш-сообщением.
Затем, если значение valid делает вызов этого сервера для проверки фактического самого zip.
Единственным недостатком для надежных серверов, таких как это, является то, что они увеличивают зависимость от других сайтов и сервисов. Поэтому, если другой сайт/услуга меняет вещи или недоступен и т.д., Возникает проблема. Это еще одна причина, по которой простейшая проверка достоверности сначала - отличная идея.
Полное сервисное решение также проверит тайм-аут службы почтового индекса, и если это произойдет, скажем, 5 секунд, и формат, скорее всего, лучше всего принять значение. Возможно, установите флажок "unverified_zip", если это возможно!
Это сработало для меня: (ruby-2.0.0-p247, rails 4.0.0)
validates_format_of :zip_code,
with: /\A\d{5}-\d{4}|\A\d{5}\z/,
message: "should be 12345 or 12345-1234",
allow_blank: true
Пожелайте, чтобы это было полезно.
Если вам нужна поддержка нескольких стран, вы можете использовать validates_zipcode
gem, который я выпустил. В настоящее время он поддерживает 159 стран форматы zipcode и отлично работает с Rails 3 и 4.
Вы можете использовать его следующим образом:
class Address < ActiveRecord::Base
validates_zipcode :zipcode
validates :zipcode, zipcode: true
validates :zipcode, zipcode: { country_code: :ru }
validates :zipcode, zipcode: { country_code_attribute: :my_zipcode }
end
Почтовые индексы в США составляют 5 цифр или 5 цифр плюс 4 цифры для кода зоны. Попробуйте следующее:
validates_format_of :zip_code,
:with => %r{\d{5}(-\d{4})?},
:message => "should be 12345 or 12345-1234"
Это хорошие ответы!
Еще одна идея состоит в том, чтобы создать собственную собственную проверку, которая не только проверяет правильность количества цифр, но также проверяет базу данных в фоновом режиме, что существуют почтовые коды..например. эти драгоценные камни могли бы помочь:
geokit, здесь: Лучший плагин почтового индекса для Ruby
zip-code-info, http://rubygems.org/gems/zip-code-info