Валидиране на e-mail адрес
17 отговора
464 прегледа
Валидиране на e-mail адрес
Валидиране на e-mail адрес
Търся функциика за валидиране на е-маил адрес.
В краен случей
ме устройват и критериите за проверка.
Благодаря
Търся функциика за валидиране на е-маил адрес.
В краен случей
Благодаря
Re: Валидиране на e-mail адрес
Какво имаш в предвид под "Валидиране на e-mail адрес"? Наличие на едно @ в него, или проверка за реално съществуване на този адрес?
Възможно е само второто:
function Check_Email_Address(e-mail-address: string): Boolean;
var
I: Integer;
S: string;
begin
Result:= False;
I:= Pos('@', e-mail-address);
if I > 0 then
begin
S:= Copy(e-mail-address, I+1, length(e-mail-address)-I);
if Pos('@', S) = 0 then
Result:= True;
end;
end;
Възможно е само второто:
function Check_Email_Address(e-mail-address: string): Boolean;
var
I: Integer;
S: string;
begin
Result:= False;
I:= Pos('@', e-mail-address);
if I > 0 then
begin
S:= Copy(e-mail-address, I+1, length(e-mail-address)-I);
if Pos('@', S) = 0 then
Result:= True;
end;
end;
Формален контрол
Формален контрол, а не контрол на мейл сървъра :)
А това за едното @ едва ли е достатъчно, може би трябва да се провери и зоната в края на мейл адреса (или поне наличието й в стринга)
А това за едното @ едва ли е достатъчно, може би трябва да се провери и зоната в края на мейл адреса (или поне наличието й в стринга)
Re: Формален контрол
Пиша малко наизуст
<име>@<събдом>.<дом>
Където:
<име> да се проверява на дължина и допустими символи и комбинация от символи - RFC нам кое си
<събдом>да се проверява на дължина и допустими символи и комбинация от символи - RFC нам кое си
<дом>да се проверява за принадлежност към домейните от горно ниво - RFC нам кое си
<име>@<събдом>.<дом>
Където:
<име> да се проверява на дължина и допустими символи и комбинация от символи - RFC нам кое си
<събдом>да се проверява на дължина и допустими символи и комбинация от символи - RFC нам кое си
<дом>да се проверява за принадлежност към домейните от горно ниво - RFC нам кое си
Ще почакам още малко по темата
Ще почакам още малко по темата, преди да почна да рова RFC
Впрочем, някъде бях мернал на PHP - май по-лесно ще стане.
Впрочем, някъде бях мернал на PHP - май по-лесно ще стане.
Re: Валидиране на e-mail адрес
Използвай например:
[линк]
regExpr := TregExpr.Create;
regExpr.ModifierI := False;
regExpr.ModifierM := True;
regExpr.Expression := '\W(\w{n,})@(\w{m,}).(\w{2,3})\W';
if regExpr.Exec(mail) then
begin
User := regExp.Match[1];
SubDom := regExp.Match[2];
Dom := regExp.Match[3];
if ... then ...
end;
n и m са минималните допустими дължини на съответните части (виж поста на NDeu). За User, SubDom и Dom можеш да направиш допълнителни проверки.
пп: сорса съм го писъл тук и може да има грешки.
[линк]
regExpr := TregExpr.Create;
regExpr.ModifierI := False;
regExpr.ModifierM := True;
regExpr.Expression := '\W(\w{n,})@(\w{m,}).(\w{2,3})\W';
if regExpr.Exec(mail) then
begin
User := regExp.Match[1];
SubDom := regExp.Match[2];
Dom := regExp.Match[3];
if ... then ...
end;
n и m са минималните допустими дължини на съответните части (виж поста на NDeu). За User, SubDom и Dom можеш да направиш допълнителни проверки.
пп: сорса съм го писъл тук и може да има грешки.
Редактирано от vido на
Re: Формален контрол
В отговор на:.<дом> съвсем не е задължително...мисля.
И понеже най-мразим да мислим, както казват селяните на запад
6.2.2. ABBREVIATED DOMAIN SPECIFICATION
Since any number of levels is possible within the domain
hierarchy, specification of a fully qualified address can
become inconvenient. This standard permits abbreviated domain
specification, in a special case:
For the address of the sender, call the left-most
sub-domain Level N. In a header address, if all of
the sub-domains above (i.e., to the right of) Level N
are the same as those of the sender, then they do not
have to appear in the specification. Otherwise, the
address must be fully qualified.
This feature is subject to approval by local sub-
domains. Individual sub-domains may require their
member systems, which originate mail, to provide full
domain specification only. When permitted, abbrevia-
tions may be present only while the message stays
within the sub-domain of the sender.
Use of this mechanism requires the sender's sub-domain
to reserve the names of all top-level domains, so that
full specifications can be distinguished from abbrevi-
ated specifications.
Re: Формален контрол
Айде и аз да напиша един израз :-)
/^[a-zA-Z0-9_.\-]+@[a-zA-Z0-9.\-]+[a-zA-Z0-9\-]\.[a-zA-Z][a-zA-Z]+$/
/^[a-zA-Z0-9_.\-]+@[a-zA-Z0-9.\-]+[a-zA-Z0-9\-]\.[a-zA-Z][a-zA-Z]+$/
Re: Валидиране на e-mail адрес
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 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) < 5)) then
Exit;
i:= Pos('.', serverPart);
if (i = 0) or (i > (Length(serverPart) - 2)) then
Exit;
Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;
function CheckAllowed(const s: string): boolean;
var
i: integer;
begin
Result:= false;
for i:= 1 to Length(s) do
begin
if not (s 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) < 5)) then
Exit;
i:= Pos('.', serverPart);
if (i = 0) or (i > (Length(serverPart) - 2)) then
Exit;
Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;
someone@my_company_name.com
Твоята функция какво ще каже за тоя адрес? Щото според мен е невалиден
ПП А как стои въпроса с интернационализацията на имената, след като вече мога да си регистрирам домейн на кирилица или на китайски, значи мога да имам и e-mail адрес в този домейн...
ПП А как стои въпроса с интернационализацията на имената, след като вече мога да си регистрирам домейн на кирилица или на китайски, значи мога да имам и e-mail адрес в този домейн...
Re: someone@my_company_name.com - кое е невалидно?
someone@my_company_name.com
кое му е невалидното на това?
кое му е невалидното на това?
Re: someone@my_company_name.com - кое е невалидно?
В името на домейна не можеш да имаш подчертавка...
Ша сложим параметър на вътр.функциика, 10х
Ша сложим параметър на вътрешната функциика, 10х
А може би и в заоната не може да има друго, освен букви?
А може би и в заоната не може да има друго, освен букви?
Re: Ша сложим параметър на вътр.функциика, 10х
Явно не ви се използват регулярни изрази, но все пак ето прицезиран регулярен израз в зависимост от последните забележки
regExpr.Expression := '\W(\w{n,})@([a-zA-Zа-яА-Я0-9]{m,})\.([a-zA-Zа-яА-Я0-9]{2,3})\W';
С регулярен израз може да се прецизира максимално според всички критерии, а основното е че кода винаги ще е 5 реда.
regExpr.Expression := '\W(\w{n,})@([a-zA-Zа-яА-Я0-9]{m,})\.([a-zA-Zа-яА-Я0-9]{2,3})\W';
С регулярен израз може да се прецизира максимално според всички критерии, а основното е че кода винаги ще е 5 реда.
Редактирано от vido на
Re: Ша сложим параметър на вътр.функциика, 10х
Това все пак е форум за Делфи, а не за Пърл :-) Тук хората повече държат кода да е ясен, а не сбит. Например на мен лично ми отне 2 пъти повече време да открия в твоя регулярен израз, че [email protected] няма да мине при теб, отколкото да видя проблемите в горните примери. Освен това за да ползваш регулярни изрази в Делфи трябва да инсталираш допълнителни компоненти или библиотеки, което не винаги е желателно.
Re: Ша сложим параметър на вътр.функциика, 10х
ОК. Просто аз обичам да работя в такива ситуации с RE.