【问题标题】:Rails - Validate Expressions [X or Y]Rails - 验证表达式 [X 或 Y]
【发布时间】:2011-12-01 07:02:27
【问题描述】:

我已经定义了 2 个正则表达式。

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}$/
hostname_regex = /^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$/

我需要允许用户在文本字段中输入 IP 地址或主机名。我的验证码如下。

validates :ip_address,  :presence => true,
                        :format   => { :with => ip_regex || hostname_regex }

我已经验证了 ip_regex 是成功的。但是,hostname_regex 不是。看来 hostname_regex 或我的验证代码有缺陷。它是哪一个?我该如何解决这个问题?是否有更有效和/或更高效的方式来执行此任务?

【问题讨论】:

标签: ruby-on-rails regex validation


【解决方案1】:

我认为您的 hostname_regex 没有问题。

您可以使用正则表达式 OR(|) 运算符来匹配多个格式。只需将正则表达式用 | 分隔即可运算符。

validates :ip_address,  :presence => true,
:format   => { :with =>/(^([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}$)|(^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$)/ }  

参考

【讨论】:

  • 这非常有效。非常感谢您的帮助。
【解决方案2】:
^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$

->http://www.mkyong.com/regular-expressions/10-java-regular-expression-examples-you-should-know/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多