ЭГ
Элина Герасимова

Delphi функция проверки вводимого EMail доделать (+)

function IsValidEmail(const Value:string):boolean;

function CheckAllowed(const s:string):boolean;

var

i: integer;

begin

Result:= false;

for i:= 1 to Length(s) do

begin

if not (s[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', '-', '.']) then

Exit;

end;

Result:= true;

end;

var

i: integer;

namePart, serverPart: string;

begin

Result:= false;

i:= Pos('@', Value);

if i = 0 then

Exit;

namePart:= Copy(Value, 1, i - 1);

serverPart:= Copy(Value, i + 1, Length(Value));

if (Length(namePart) = 0) or ((Length(serverPart) < 4)) then

Exit;

i:= Pos('.', serverPart);

if (i = 0) or (i > (Length(serverPart) - 2)) then

Exit;

Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);

end;


Работает, но как добавить, чтобы проверяла последние 2 символа, чтобы в конце не было ни точки ни запятой, чтобы только 'a'..'z', 'A'..'Z' последние два?

Мне эта функция уже мозг вынесла.. .

ВП
Вася Пупкина

А ты используй регулярки. Они мозг хоть и выносят, но можно найти уже готовую, например:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$

Эльмира Галяутдинова
Эльмира Галяутдинова

Неблагодарное это дело, email проверять на валидность. Разве что с указанным сервером соединяться и запрашивать существование введенного адреса.
Почта может быть и на интернационализованных доменах, почта@мыло. рф какое-нибудь.
В общем случае так же валидны такие адреса:
firstname+lastname@example.com
email@123.123.123.123
email@[123.123.123.123]
"email"@example.com
very.”(),:;<>[]”.VERY.”very@\\ "very”.unusual@strange.example.com
!#$%&'+-/=.?^`{|}~@[IPv6:0123:4567:89AB:CDEF:0123:4567:89AB:CDEF]
"spaces may be quoted"@example.com
Адреса так же могут содержать комментарии в скобках и имя получателя.

Проверяйте только наличие символа эт в адресе, обычно этого достаточно.

Н@дюш@
Н@дюш@

вместо этой функции
var RegEx: TRegEx;
begin
RegEx:=TRegEx.Create('(.+)\@(.+)\.(.+)');// xxx@xxx.xx
if RegEx.IsMatch('Any text')then
ShowMessage('Есть свпадения')

Иван Маркелов
Иван Маркелов

Подпрограмма CheckAllowed - слишком общая. Надо добавить функцию isLetter, проверяющую на буквы.
И да, тут регулярки рулят.

Похожие вопросы
помогите с delphi. как присвоить к переменной вводимое значение и куда вписывать формулу, чтоб выводился результат?
Delphi. Как сделать чтобы при нажатии мыши вылазил график функции?
Delphi проверка работы сайта
Delphi построение граффика функции
Помогите доделать!!!
помогите пожалуйста доделать плейер на delphi
Delphi Какие функции есть в delphi для чтения дорожек/секторов?
[Delphi] Помощь по функции TaskKill (Завершения процесса)
С++.Рекурсивная функция проверки числа.
помогите составить программу вычисления функции в Delphi