Сколько символов @ может быть в адресе электронной почты?

Есть ли какое-либо правило для наличия определенного количества символа @ в любом идентификаторе электронной почты. Просто приходите мне на ум, если мы проверим, действительно ли идентификатор электронной почты действителен или не использует PHP.

Если enquoted multiple @ разрешено. Я должен спросить, зачем вам нужна эта информация. Пожалуйста, пожалуйста, не пытайтесь писать регулярное выражение / функцию или что-то еще, чтобы проверить адрес электронной почты. Вам нужно беспокоиться о 3 rfc (и, возможно, 4, если вы хотите учесть unicode). И вы потерпите неудачу, и это сведёт вас с ума.

См. Мой предыдущий ответ для получения дополнительной информации и регулярного выражения, которое вы можете использовать, если у вас установлена ​​более старая версия PHP

PS

В случае, если кто-то пропустил мою мысль: не пытайтесь придумать свою собственную проверку, чтобы самостоятельно проверять адреса электронной почты.

Может быть любое число (в пределах размера адреса электронной почты), за исключением того, что последний должен быть разделителем между именем домена и «локальной частью» .

Если @ или любые другие «необычные» символы (как определено в RFC 5322 ) существуют в локальной части, они ДОЛЖНЫ появляться в кавычках, например: "user@something"@example.com

Нет специального ограничения на @ символов.

"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com – действительный адрес.

См. Также страницу Википедии по этому вопросу.

Мой реальный вопрос в том, имеет ли смысл иметь два символа @ в электронном письме?
Как это сработает?

Я бы использовал filter_var() с FILTER_VALIDATE_EMAIL . Ниже приведен пример использования и результатов,

 function testemail($email) { echo "'$email' => "; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); echo "<br />"; } testemail(''); testemail('myemailsample.com'); testemail('myemail@sample'); testemail('myemail@sample.com'); testemail('myemail@@sample.com'); testemail('myemail@sa@mple.com'); 

Вывод,

'' => bool (false)
'myemailsample.com' => bool (false)
'myemail @ sample' => bool (false)
'myemail@sample.com' => строка (18) "myemail@sample.com"
'myemail @@ sample.com' => bool (false)
'myemail @ sa @ mple.com' => bool (false)

Чтобы проверить действительный адрес электронной почты, я должен использовать функцию filter_var. Он проверит строку и вернет true или false. Вам не нужно думать о регулярных выражениях.

Addr-spec – это специфический идентификатор Интернета, который содержит строку, интерпретированную локально, за которой следует знак at-sign («@», значение ASCII 64), за которым следует домен Интернета. Локально интерпретированная строка представляет собой либо строку с кавычками, либо точечный атом. Если строка может быть представлена ​​как точка-атом (т. Е. Она не содержит символов, отличных от скрытых символов или «.», Окруженных символами axtext), то форма dot-atom ДОЛЖНА использоваться, а форма кавычки НЕ ДОЛЖНА использоваться. Комментарии и складывающиеся пробелы НЕ ДОЛЖНЫ использоваться вокруг «@» в addr-spec.

См.: – http://tools.ietf.org/html/rfc5322#section-3.4.1.