• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

ABAddressBook-API, Suche

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Moin,

mittels der API kann ich ja schön aufs systeminterne Adressbuch zugreifen. Wunderbar.

Ich möchte nun nach Telefonnummern suchen, um ggfs. die zugehörigen Namen zu ermitteln. Im Adressbuch habe ich jedoch meine Nummern der Übersicht halber mit Leerzeichen gruppiert, also z. B. +49 1234 56789. Suche ich nun nach +49123456789, finde ich natürlich nichts.

Gibt’s grundsätzlich eine Möglichkeit, die Suche ein wenig „fuzzy“ oder intelligent zu gestalten? Oder habe ich keine andere Wahl, als alle Kontakte durchzugehen und den Stringvergleich selbst vorzunehmen?
 
Zuletzt bearbeitet:

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Das Problem kommt mir bekannt vor... Du arbeitest aber nicht am S...f... Projekt?

Anyway, eine Fuzzy Suche gibt es nicht. Du musst die Nummern selbst normalisieren oder sonstwie abgleichen.

Alex
 
  • Like
Reaktionen: bezierkurve

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Lass alle Leerzeichen erstmal mit einem leeren String ersetzen. Dann hast du dein gewünschter Suchbegriff:

Code:
stringWithoutWhitespaces = [myStringWithWhitespaces stringByReplacingOccurrencesOfString:@" " withString:@""];

Gruss ppocket
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Lass alle Leerzeichen erstmal mit einem leeren String ersetzen. Dann hast du dein gewünschter Suchbegriff:

Das stimmt so nicht. Telefonnummern können in unterschiedlichen Formaten angegeben werden, zum Beispiel +49 123 456789, 0123 456789, 0049 123 456789 oder sogar +49 (0) 123 456789

Tante Edith erinnert mich an (0123) 456789

Alex
 
Zuletzt bearbeitet:

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Wenn er seine Nummern nur mit Leerzeichen versehen hat, stimmt das sehr wohl. Aber natürlich hast du recht, es gibt viele Formate, welchem man nicht alle auf einmal behandeln kann.

Gruss ppocket

PS: Alle Nummern haben aber dieselbe Anzahl Ziffern. Nutze das aus. Ich würde das irgendwie so machen:

1) Alle Leerzeichen und Klammern wie oben beschrieben durch leere Strings ersetzen.

2)
- hat die Nummer dann noch 12 Zeichen, ist sie von der Form +41791238930
- hat die Nummer dann noch 10 Zeichen, ist sie von der Form 0791238930
- hat die Nummer dann noch 13 Zeichen, ist sie von der Form 0041791238930

Dann alle Nummern in dieselbe Form bringen und Suche drüber laufen lassen...
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Lässt du die + en durch 00 ersetzen, fällt dir sogar noch ein Fall weg... Umgekehrt macht es keinen Sinn, da eine Nummer durchaus weiter hinten noch zwei Nullen in Folge haben kann, jedoch kein weiteres +...
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ich habe da mal ein nicht ganz triviales Stück Code geschrieben, dass alle Nummern schön in ein normiertes Format bringt.

Da muss man ein bischen Nachdenken, aber mit einer hübschen Regular Expression hab ich das gut hinbekommen.

Alex
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
regex ist auch eine Möglichkeit. Ich kenne mich damit leider aber nur wenig aus...
 

Irgendein Held

Oberösterreichischer Brünerling
Registriert
17.06.07
Beiträge
714
Mit regex ist das ganze easy as pie und man hat ein aeussert maechtiges Werkzeug an der Hand.

2)
- hat die Nummer dann noch 12 Zeichen, ist sie von der Form +41791238930
- hat die Nummer dann noch 10 Zeichen, ist sie von der Form 0791238930
- hat die Nummer dann noch 13 Zeichen, ist sie von der Form 0041791238930

Sicher, dass in allen Laendern alle Telefonnummern gleich lang sind?
 

Irgendein Held

Oberösterreichischer Brünerling
Registriert
17.06.07
Beiträge
714
Also, vielleicht bin ich ein bischen blöd, aber das Erstellen einer RegEx, die alle Fälle und Sonderfälle (und die Ausnahmen davon) behandelt fand ich schon intellektuell herausfordernd...

Anfangs ja, aufjedenfall. Aber man gewoehnt sich an die Syntax und das Lesen. Zumin sind das meine Erfahrungen. Dazu gehoerte auch die Erfahrung es mit RegEx zu uebertreiben, was auf keinen Fall sinnvoll ist.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Anfangs ja, aufjedenfall. Aber man gewoehnt sich an die Syntax und das Lesen.

Ich meinte gar nicht so sehr das eigentliche Schreiben der RegEx, soviel Erfahrung hab ich schon ;)

Aber sich zu überlegen, welche Fälle alle auftreten können, und wie ich die behandele hat schon ein bischen Nachdenken gebraucht. Man unterschätzt sich da leicht, insb. wenn man nicht nur deutsche, sondern internationale Telefonnummern durchsuchen will.

Alex
 

Irgendein Held

Oberösterreichischer Brünerling
Registriert
17.06.07
Beiträge
714
Aber sich zu überlegen, welche Fälle alle auftreten können, und wie ich die behandele hat schon ein bischen Nachdenken gebraucht. Man unterschätzt sich da leicht, insb. wenn man nicht nur deutsche, sondern internationale Telefonnummern durchsuchen will.

Das stimmt wohl, grade wenn man Eingaben validieren will.
Wenn der Anwendungsfall jetzt in einem Rahmen ist der ueberschaubar bleibt, kann man sich natuerlich auf die Faelle beschraenken, die man kennt.
Will man sich allerdings einen Parser fuer alle moeglichen Kombinationen von Telefonnummern basteln, dann sollte man sich eine Strategie in der Art wie Poljpocket das beschrieben hat ueberlegen.

Nachtrag: Rubular ... netter Evaluator. Auch wenn das ganze fuer Ruby ausgelegt ist - so in "Echtzeit" hilft das ganze schon enorm.