Точная проверка адресов электронной почты с использованием регулярных выражений нецелесообразна. Формат адресов электронной почты чрезвычайно сложен, как неформально описано в Википедии и более формально в RFC, связанных с этой страницей.
Как вы видите из ответов, данных другими людьми, любое регулярное выражение, которое пытается заняться чем-то таким сложным, неизбежно будет непостижимо для человека; так что вы никогда не можете быть уверены, что это правильно.
Это не просто теоретическая проблема. Любой сложный код проверки электронной почты, попадающий в дикую природу, будет попадать в случаи, которые он не может обработать на удивление быстро. В качестве примера из тесно связанной области мне часто приходится лгать о своем имени, когда я говорю с компьютерами, потому что в нем есть дефис.
Вам следует подумать о том, чего вы пытаетесь достичь с помощью своей валидации. Какие значения вы хотели бы исключить, и какова стоимость этого? На самом деле вы хотите исключить ошибки со стороны пользователя, скорее всего, опечатки; но подавляющее большинство (вероятных) опечаток приведут к действительному адресу электронной почты, поэтому вы их не поймете.
Единственный практический способ проверить адрес электронной почты - отправить ему письмо. Если вам действительно нужен адрес электронной почты для ваших пользователей, это единственный способ убедиться, что у вас есть действительный адрес.