Registriert seit: 2. Mär 2004
5.508 Beiträge
Delphi 5 Professional
|
Handynummer erkennen
1. Jun 2010, 18:17
Ich möchte erkennen, ob es sich bei einer Telefonnummer um eine Handynummer (mobile phone number) handelt.
Dazu habe ich mir folgende Code zusammengebaut:
Delphi-Quellcode:
function IsMobilePhoneNumber(x:string):Boolean;
const
vorwahl_DE: array[0..16] of string =
(
// T-Mobile
'151', '160', '170', '171', '175',
// vodafone
'152', '162', '172', '173', '174',
// E-Plus
'157', '163', '177', '178',
// O2
'159', '176', '179' );
var
p1 : Integer;
begin
x := StrRemoveChars(x, [' ','P','-']); // Störzeichen entfernen
if x = '' then
begin
Result := False;
Exit;
end;
// Nummer mit diesem Aufbau behandeln
// +xx(0)170yyyyyyy
if x[1] = '+' then
begin
// die (0) rausschneiden
p1 := Pos('(0)', x);
if (p1 > 1) then
Delete(x, p1, 3);
end;
if x[1] ='0' then
Result := StrHasPrefix(Copy(x, 2, 10), vorwahl_DE)
else if StrHasPrefix(x, ['+49']) then
begin
Result := StrHasPrefix(Copy(x, 4,10), vorwahl_DE);
end
else
Result := False;
end;
Irgendwelche Ideen, was man noch verbessern könnte?
Oder wie man auch Handynummern im europäischen Ausland erkennen kann?
Die Funktionen StrRemoveChars() und StrHasPrefix() stammen aus der JCL.
Ich reiche sie hier mal nach für den Fall, dass jemand den Code ohne JCL testen möchte:
Delphi-Quellcode:
function StrRemoveChars(const S: string; const Chars: TSysCharSet): string;
var
Source, Dest: PChar;
Len, Index: Integer;
begin
Len := Length(S);
SetLength(Result, Len);
UniqueString(Result);
Source := PChar(S);
Dest := PChar(Result);
for Index := 0 to Len-1 do
begin
if not (Source^ in Chars) then
begin
Dest^ := Source^;
Inc(Dest,SizeOf(Char));
end;
Inc(Source,SizeOf(Char));
end;
SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(Char));
end;
function StrPrefixIndex(const S: string; const Prefixes: array of string): Integer;
var
I: Integer;
Test: string;
begin
Result := -1;
for I := Low(Prefixes) to High(Prefixes) do
begin
Test := StrLeft(S, Length(Prefixes[I]));
if AnsiSameText(Test, Prefixes[I]) then
begin
Result := I;
Break;
end;
end;
end;
function StrHasPrefix(const S: string; const Prefixes: array of string): Boolean;
begin
Result := StrPrefixIndex(S, Prefixes) > -1;
end;
Andreas
|