validates_format_of :email,
:with => (/^([^@\s]+)@((gmail|yahoo|hotmail)\.+[a-z]{2,})$/i)
something like this?
[a-z] at the end won't capture something like '.com.au' or similar, is that okay?
Also,
. is for single character, you want \. for an actual period
otherwise 'gmailxcom' would be valid