Строгая проверка электронной почты в Excel 2013

4570
Mohammed Abusaif

Я использую Excel 2013. Я создаю форму, которую будет заполнять конечный пользователь.

У меня есть ячейка, в которой пользователи могут ввести свой адрес электронной почты, и я хочу провести тщательную проверку электронной почты. Я искал много в Интернете, и все, что я нашел это предложение для поиска наличия @и, .но если, например, пользователь вводит конец это: . @@ ком, не будет помечена никакой ошибки.

Какова правильная проверка?

Примечание: я пытался использовать UDF и VBscript, который я нашел в Интернете, и ни один из них не работает для меня.

0
«и все, что я нашел, это просто поиск по (@,.)», «я пытался использовать UDF и VBscript» - это очень широкие описания, пожалуйста, опишите, что именно вы пытались / нашли и почему это не не работает для вас. Máté Juhász 8 лет назад 1
@OP: Вы ищете чисто функциональное решение Excel или VGA разрешен? Hennes 8 лет назад 0

2 ответа на вопрос

1
Andi Mohr

Приспосабливая технику Билла Мэнвилла, это должно работать для вас. Войдите в Проверку данных и выберите Пользовательский . Введите эту формулу (если ваш адрес электронной почты находится в ячейке A2):

=AND(ISERROR(FIND(" ",A2)),LEN(A2)-LEN(SUBSTITUTE(A2,"@",""))=1,IFERROR(SEARCH("@",A2)<SEARCH(".",A2,SEARCH("@",A2)),0),NOT(IFERROR(SEARCH("@",A2),0)=1),NOT(IFERROR(SEARCH(".",A2,SEARCH("@",A2))-SEARCH("@",A2),0)=1),LEFT(A2,1)<>".",RIGHT(A2,1)<>".") 

Вот та же формула, разнесенная, чтобы ее можно было прочитать:

=AND( ISERROR(FIND(" ",A2)) ,LEN(A2)-LEN(SUBSTITUTE(A2,"@",""))=1 ,IFERROR(SEARCH("@",A2)<SEARCH(".",A2,SEARCH("@",A2)),0) ,NOT(IFERROR(SEARCH("@",A2),0)=1) ,NOT(IFERROR(SEARCH(".",A2,SEARCH("@",A2))-SEARCH("@",A2),0)=1) ,LEFT(A2,1)<>"." ,RIGHT(A2,1)<>"." ) 

Это проверяет, что:

  1. Там нет пробелов
  2. Только один @символ
  3. Перед @символом есть несколько символов
  4. Хотя бы один .символ после @символа
  5. Как минимум один символ между @и следующими .символами
  6. Адрес не начинается и не заканчивается на .
На самом деле, спасибо за ваш ответ, но где я должен поставить его, я попытался набрать его пользовательской проверки, но это слишком долго. Mohammed Abusaif 8 лет назад 0
Поле проверки данных, кажется, позволяет использовать только 255 символов, поэтому я немного урезал формулу. Попробуй это сейчас. Andi Mohr 8 лет назад 0
Я думаю, что два @ также совершенно законны. Чтобы процитировать RFC: `Строки символов, которые включают символы, отличные от разрешенных в атомах, могут быть представлены в формате строки в кавычках, где символы заключены в кавычки '. Так что "J@ne"@demo.net также является законным. Hennes 8 лет назад 1
Я думаю, вы технически правы (как правило, лучший вариант), но для любого реального приложения два @ в адресе электронной почты с большей вероятностью будут ошибкой, чем нет. Не могу сказать, что я когда-либо сталкивался с такой в ​​реальной жизни. Если это важно, то вы можете просто удалить этот бит из формулы: `, LEN (A2) -LEN (SUBSTITUTE (A2," @ "," ")) = 1`. Andi Mohr 8 лет назад 0
Я согласен, два @ должны быть очень редкими и, вероятно, ошибка. Однако я знаю нескольких людей, которые используют такие вещи, как ny.name+ibood@mydomain.tld. Если я получаю письмо с этим в заголовке, я знаю, как переместить его в папку. Если я получу спам по этому адресу, я знаю, куда пожаловаться. К сожалению, есть много веб-валидаторов, которые ставят знак +, очевидно, некоторые используют его как внутренний разделитель и плохо написаны. Я могу обойти это, используя другой почтовый адрес. Однако я не могу обойтись без доверия к плохо написанным интерфейсам. Hennes 8 лет назад 0
0
Hennes

Формат адреса электронной почты четко определен в RFC 2822 .

В основном вы можете упростить это следующим образом.

У вас есть две части: USER @ Domain.

Домен в точечно-десятичном формате. Например, mydomain.tld, foo.bar.baz.net и т. Д.

Пользователь более сложный, это может быть строка в кавычках или точечный формат с контентом между точками и опцией + маркер.


Пример1 : "@@pen00tje"@superuser.com
Пользователь @@penootje. домен есть superuser.com. Между именем пользователя и доменом стоит @.

Пример 2:
Jane.Smith@Superuser.com

Пример 3:
Jane.Smith+tag@Superuser.com
Это будет отправлено по почте с адресом доставки, Jane.Smith@Superuser.comно в поле «Кому:» будет указано Jane.Smith+tag@Superuser.com. Это позволяет вашему почтовому клиенту фильтровать сообщения.

Неверный пример:
Jane..Smith @ Superuser.com (две точки не разрешены под именем пользователя)

Большинство веб-форм, похоже, ошибаются. Даже крупные организации приходят в упадок, поскольку Dell и Visa терпят неудачу, когда сталкиваются с легальными, но неожиданными адресами электронной почты. Пожалуйста, прочитайте RFC. Поначалу читать то, что написано, нетривиально, но уже в формате, который идеально подходит для перевода в код (или в правила Excel). и это единственный источник истины для того, что разрешено.

Это очень интересно, но, похоже, не отвечает на вопрос - как вы проверяете адрес электронной почты в Excel? (Замечание: я знаю, что Gmail допускает использование нескольких точек в имени пользователя - я думаю, это еще одна несовместимая реализация) Andi Mohr 8 лет назад 0
На самом деле, да, вы правы. Я полностью отвлекся от части Excel. Позвольте мне немного поиграть с Excel и посмотреть, смогу ли я придумать что-нибудь. Hennes 8 лет назад 1
Тьфу. Это сложнее, чем кажется, используя просто excel, чтобы найти последний @ означающий поиск в Google. Без VBA (и InStrRev) трудно просто найти последний @. Закрывается Я сейчас являюсь `TRIM (RIGHT (ЗАМЕНА (текст," ", REPT (" ", LEN (текст))), LEN (текст))` в сочетании с НАЙТИ. Hennes 8 лет назад 1

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