我想在两种情况下验证输入框值:
我在这里有一个简单的界限:
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7);
Observable.from(list)
.map(new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return String.format("%d ",integer);
}
}).subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.print(s);
}
});
}
这将适用于所有情况,但不会允许nil / empty值,因为它会抛出异常。但是:
validates :ip_addr, format: { with: Regexp.union(Resolv::IPv4::Regex)}
和
validates :ip_addr, format: { with: Regexp.union(Resolv::IPv4::Regex)}, allow_nil: true
将允许nil / empty值但是如果输入无效,例如“33 @@@#$”然后返回“true”。
我怎么能包括这两种情况?那可能吗 ?
编辑:似乎validates :ip_addr, format: { with: Regexp.union(Resolv::IPv4::Regex)}, allow_blank: true
返回nil所以如果验证以相同的方式工作,它将以错误的值返回nil,Regexp.union(Resolv::IPv4::Regex).match("something")
将允许它们像这样持久化。
答案 0 :(得分:0)
试试这个
validates :ip_addr, format: { with: Regexp.union(Resolv::IPv4::Regex)}, if: :ip_addr
我不确定上述内容是否有效。如果没有,请执行此操作
validate :ip_addr_format_check, if: :ip_addr
def ip_addr_format_check
unless ip_addr =~ Regexp.union(Resolv::IPv4::Regex)
errors.add(:base, "Error you want to show")
end
end
答案 1 :(得分:0)
Typecasting似乎是个问题。
以下解决方案运行良好:
validates :ip_addr, format: { with: Resolv::IPv4::Regex },
presence: false, unless: Proc.new { |ifc| ifc.ip_addr_before_type_cast.blank? }
我们最需要检查变量的值是否为空,然后再将其转换为inet(postgreSQL)。