我想确保只有拥有有效.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
正则表达式是什么?你可以指出我可以找到的信息来弄明白。
答案 0 :(得分:1)
我会实施两个验证:
validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create }
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