MySQL регулярное выражение для проверки электронной почты не работает - квантификатор фигурных скобок игнорируется

Это может быть безопасно (я этого не знал, но другие ответы, похоже, предлагают это), но я не буду привыкать к тому, чтобы не заботиться о том, является ли указатель уже нулевым. Назначение p = NULL; после каждого бесплатного скоро следует в качестве следствия. Это опасно для многопоточных приложений, так как после этого назначения p может использоваться другим потоком и будет снова освобожден текущим потоком, пока он ожил другими потоками.

Каждая память malloc'd должна быть освобождена один раз. Период.

3
задан Rick Gladwin 18 January 2019 в 02:24
поделиться

2 ответа

Вы можете попробовать использовать следующий шаблон регулярных выражений:

^[^@]+@[^.]+[.][^.]{2,}([.][^.]{2,})*$

Самая правая часть шаблона означает:

[.]                match a literal dot
[^.]{2,}           followed by a domain component (any 2 or more characters but dot)
([.][^.]{2,})*     followed by dot and another component, zero or more times

Демо

[114 ]

Так что это будет соответствовать:

jon.skeet@google.com
jon.skeet@google.co.uk

Но не будет соответствовать:

gordonlinoff@blah
0
ответ дан Tim Biegeleisen 18 January 2019 в 02:24
поделиться

Боже, мы хакеры и проверяем вещи! Более того, мы понимаем такие понятия, как соответствие ACID, целостность данных и отдельные точки авторитета. Очевидно, что мы должны убедиться, что недействительные электронные письма не попадают в БД. Что еще? У нас есть такой замечательный инструмент для этого: правильная схема с проверочными ограничениями!

К сожалению, электронные письма являются одной из тех деталей, которые общеизвестно трудно проверить с помощью простых регулярных выражений. Это возможно возможно , обязательно . Нет, на самом деле это не так. Ни одна из этих ссылок не обеспечивает 100% соответствия.

Гораздо лучший подход - просто проверить адрес, отправив ему электронное письмо с кодом активации. Дэвид Гилбертсон объясняет это гораздо лучше , чем я собираюсь в кратком SO-ответе, но основные моменты:

  1. Даже не пытайтесь проверить.

  2. Просто протестируйте адрес с реальным адресом электронной почты.

Для моих проектов, как личных, так и профессиональных, это регулярное выражение, которое я использую для проверки работоспособности адреса электронной почты перед отправкой письма активации / подтверждения:

\S+@\S+ 

Это очень просто (и да, все еще исключает некоторые технически действительные адреса электронной почты), чрезвычайно прост в отладке и работает для любого законного трафика на наши сайты. (Я еще не видел адрес электронной почты, даже похожий на #!$%&’*+-/=?^_{}|~@example.com в наших журналах.)

0
ответ дан hunteke 18 January 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: