EDU字符串到正则表达式

时间:2013-08-27 20:50:41

标签: ruby-on-rails regex

我想确保只有拥有有效.edu电子邮件地址的学生才能注册。

这是rails doc

的一种方式
validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create }

我对正则表达式很弱。我向谷歌投了/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,测试字符串为launch@bacon.com

我有0正则表达式经验。如果测试字符串是.edu正则表达式是什么?你可以指出我可以找到的信息来弄明白。

2 个答案:

答案 0 :(得分:1)

我会实施两个验证:

  1. 检查电子邮件格式是否正确
  2. validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create }

    1. 检查.edu域名
    2. validates :email, :format => { :with => /.edu\Z/i, :on => :create }

答案 1 :(得分:0)

只需一个正则表达式即可完成此操作。

以下不是正则表达式如何工作的完整细分,但它可能有助于让您了解正在发生的事情。假设电子邮件地址为me@mydomain.example.com。然后:

  • me匹配/([^@\s]+)/
  • mydomain.匹配/(?:[-a-z0-9]+\.)/
  • example.也匹配/(?:[-a-z0-9]+\.)/
  • mydomain.example.匹配/(?:[-a-z0-9]+\.)+/
  • com匹配/[a-z]{2,}/

所以你想要改变它,以便最后一个位/[a-z]{2,}/正则表达式只能匹配edu

/\A([^@\s]+)@((?:[-a-z0-9]+\.)+edu)\Z/i