Jule: input type="tel"

0 108

input type="tel"

Jule
  • html
  1. 1
    MrMurphy1
    1. -1
      Jule
      1. 0
        MrMurphy1
      2. 0
        Gunnar Bittersmann
        • ux
        1. 0
          Jörg Reinholz
          1. 0
            Jule
            1. 0
              Christian Kruse
            2. 3
              MrMurphy1
          2. 3

            Offtopic / Codeschnipsel-Sammlung

            Camping_RIDER
        2. -1
          Jule
          1. 1
            Jörg Reinholz
            1. -1
              Jule
              1. 1
                Christian Kruse
              2. 0
                Jörg Reinholz
                1. 0
                  Jule
                  1. 3
                    Jörg Reinholz
                2. 0

                  ftx_cleartel_test

                  Jule
                  • php
                  1. 0
                    Jörg Reinholz
                    1. 0
                      Jule
                      1. 0
                        Jörg Reinholz
                        1. -1
                          Jule
                          1. 1
                            Camping_RIDER
                    2. 0
                      Gunnar Bittersmann
                      • sonstiges
                      1. 0
                        Jule
                        1. 0
                          Camping_RIDER
                          1. 0
                            Der Martin
                          2. 2
                            MudGuard
                          3. 2
                            Gunnar Bittersmann
                            • programmiertechnik
                            1. 1
                              Jörg Reinholz
                              1. 0

                                Neues Bastelzeug: Vorwahlen zu Array (json, php)

                                Jörg Reinholz
                                1. 0

                                  Bugfix: Vorwahlen zu Array (json, php)

                                  Jörg Reinholz
                            2. 0
                              Jörg Reinholz
                            3. 0
                              dedlfix
                              1. 0
                                Camping_RIDER
                                1. 0
                                  dedlfix
                                  1. 0
                                    Camping_RIDER
                                    1. 0
                                      dedlfix
                                      1. 0
                                        Camping_RIDER
                                        1. 0
                                          dedlfix
                                          1. 0
                                            Camping_RIDER
                                          2. 0
                                            Jörg Reinholz
                                            1. 0
                                              Camping_RIDER
                                              1. 0
                                                Jörg Reinholz
                                                1. 0
                                                  Camping_RIDER
                                                  1. 1
                                                    Jörg Reinholz
                                                    1. 0
                                                      Jörg Reinholz
                                                      1. 2

                                                        PHP7 gegen PHP5 - Messung

                                                        Jörg Reinholz
                                                        1. 0

                                                          HHVM gegen PHP7 gegen PHP5 - Messung

                                                          Jörg Reinholz
                                              2. 0
                                                Christian Kruse
                                                1. 0
                                                  Camping_RIDER
                                                  1. 0
                                                    Christian Kruse
                                                    1. 0
                                                      Camping_RIDER
                                                      1. 0
                                                        Der Martin
                                                        1. 0
                                                          Camping_RIDER
                                                  2. 0
                                                    Christian Kruse
                                                    1. 0
                                                      Camping_RIDER
                                                      1. 1
                                                        Christian Kruse
                              2. 0
                                Jörg Reinholz
                                1. 0
                                  MudGuard
                                  1. 0
                                    Jörg Reinholz
                                    1. 0
                                      woodfighter
                      2. 2
                        Christian Kruse
                  2. 0
                    Camping_RIDER
                    1. 0
                      Gunnar Bittersmann
                      • sonstiges
                      1. 0
                        Camping_RIDER
                        1. 0
                          MudGuard
                        2. 0
                          Gunnar Bittersmann
                          1. 0
                            Jule
                            1. 1
                              Gunnar Bittersmann
                              1. 0
                                Jule
                                1. 0
                                  Gunnar Bittersmann
                                  1. 0
                                    Jule
                                    1. 0
                                      Gunnar Bittersmann
                          2. 0
                            Camping_RIDER
                        3. 0
                          Jule
                3. 0
                  Gunnar Bittersmann
              3. 0
                Der Martin
                1. 0
                  Jule
                  1. 0
                    Der Martin
                    1. 0
                      Camping_RIDER
                    2. 0
                      Gunnar Bittersmann
                      • sonstiges
  2. 0
    Gunnar Bittersmann
    1. 0
      Jule
    2. 0
      Gunnar Bittersmann
      1. 0
        Jule
        1. 1
          Der Martin
          1. 1
            Gunnar Bittersmann
            • sonstiges
            • ux
        2. 0
          Jörg Reinholz
  3. 2
    Christian Kruse
  4. 0

    Telefonnummer-Formatierer

    Jörg Reinholz
    1. 0
      Jörg Reinholz
      1. 0
        woodfighter
        1. 0
          Jörg Reinholz
        2. 0
          Auge
          1. 0
            dedlfix
            1. 0
              Auge
              1. 0
                MudGuard
                1. 0
                  Auge
                2. 0
                  dedlfix
      2. 0
        MudGuard
        1. 0
          Jörg Reinholz
          1. 0
            MudGuard
            1. 0
              Jörg Reinholz
              1. 0
                Auge
                • html
                • links
                1. 0
                  Jörg Reinholz
                  1. 0

                    Verschachtelte Datenstruktur vs Binäre Suche

                    Camping_RIDER
        2. 0
          MudGuard

Guten Morgen,

wenn ich meinen Code aufrufe und nichts eingebe erhalte ich die Meldung Dieses Feld muss ausgefüllt werden passt.

Jetzt trage ich Hallo ein und ich komme weiter, falsch meiner Meinung nach.

Ich möchte dass meine User nur eine Telefonnummer eintragen können. Was mache ich falsch?

<input type="tel" name="tel_check" id="tel_check" value="" required>
  1. Hallo

    Was mache ich falsch?

    Du hast Erwartungen die nicht erfüllt werden können.

    Du denkst bei Telefonnummern nur an Zahlen. Die können jedoch auch Klammern, Bindestriche, Rauten und anderes enthalten. Zudem müsste ein Überprüfung auf eine korrekte Telefonnummer auch international funktionieren. Deshalb kann bei dem Attribut type="tel" keine Überprüfung auf eine korrekte Telefonnummer erfolgen. Dazu gibt es zu viele unterschiedliche Zeichen und deren Anordnung bei Telefonnummern.

    Zur Eingrenzung von Zeichen könntest du dich mit dem pattern-Attribut beschäftigen. Allerdings solltest du dir bewußt sein, das eine zu starke Einschränkung viele User auch vom Ausfüllen von Formularen abhält. Wenn die ihre Telefonnummer zwei, drei Mal erfolglos eingeben wurde sind die wieder weg. Sowas nervt die einfach.

    Du solltest dir also überlegen, ob deine Vorteile bei der Verarbeitung der Daten den Nachteil von abgesprungenen Besuchern überwiegen. Bei geweblichen Webseiten ist das eigentlich klar.

    Gruss

    MrMurphy

    1. Hallo,

      Zur Eingrenzung von Zeichen könntest du dich mit dem pattern-Attribut beschäftigen. Allerdings solltest du dir bewußt sein, das eine zu starke Einschränkung viele User auch vom Ausfüllen von Formularen abhält. Wenn die ihre Telefonnummer zwei, drei Mal erfolglos eingeben wurde sind die wieder weg. Sowas nervt einfach.

      ich sag es jetzt einfach mal ganz krass. Ein User der nicht lesen kann oder will (Vorgaben wie er mein Formular ausfüllen muss) kann gerne von meiner Seite verschwinden. Wenn ich Vorgaben machen, eine Nummer MUSS mit 0 beginnen dann ist das so.

      Hab etwas gefunden http://digitalbush.com/projects/masked-input-plugin/

      1. Hallo,

        ein klassisches Beispiel wie Besucher vergrault werden. Sofern du die Seite nur für dich machst ist das dann halt dein Problem.

        Gruss

        MrMurphy

      2. @@Jule

        ich sag es jetzt einfach mal ganz krass. Ein User der nicht lesen kann oder will (Vorgaben wie er mein Formular ausfüllen muss) kann gerne von meiner Seite verschwinden.

        Nutzer wollen auf Webseiten Artikel lesen, aber gewiss keine Gebrauchsanweisungen für Webseiten.

        Wenn du Nutzer von deiner Seite vergraulen will, ist das dein Ding. (Wozu baust du die Seite dann?) Wenn du Seiten für andere erstellt, hast du dafür zu sorgen, dass du keinen Nutzer vergraulst.

        Jetzt sag ich es einfach mal ganz krass: Ein Webentwickler, der das nicht beachten kann oder will, kann gerne aus dem Job verschwinden.

        Wenn ich Vorgaben machen, eine Nummer MUSS mit 0 beginnen dann ist das so.

        Dann ist das Unsinn. (089) 32168 fängt nicht mit 0 an. +49 89 32168 auch nicht.

        LLAP 🖖

        --
        Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
        1. Moin!

          ich sag es jetzt einfach mal ganz krass. Ein User der nicht lesen kann oder will (Vorgaben wie er mein Formular ausfüllen muss) kann gerne von meiner Seite verschwinden.

          Naja. War das jetzt angemessen gut überlegt oder doch vielmehr das Ergebnis einer, sagen wir: "temporären Verstimmung"?

          Wenn ich Vorgaben machen, eine Nummer MUSS mit 0 beginnen dann ist das so.

          Dann ist das Unsinn. (089) 32168 fängt nicht mit 0 an. +49 89 32168 auch nicht.

          Yes! Wie unterschiedlich Telefonnummern (ohne Vanity zu berücksichtigen!) aussehen können hatten wir erst.

          Jörg Reinholz

          1. Hallo,

            Yes! Wie unterschiedlich Telefonnummern (ohne Vanity zu berücksichtigen!) aussehen können hatten wir erst.

            ganz ehrlich interessiert mich alles nicht. Ich gebe dem User eine Schreibweise vor er muss sich dran halten und gut ist. Wer es nicht möchte wie ihr scheinbar, kann gerne gehen. Warum muss hier über sinnlose Sachen diskutiert werden? Warum kann man mir nicht einfach helfen und sagen wie ich es erreichen kann, dass die Eingabe mit einer 0 beginnen MUSS. Ob dieses Sinnvoll oder nicht Sinnvoll ist, könnt ihr doch überhaupt nicht wissen, oder?

            1. Hallo Jule,

              Warum kann man mir nicht einfach helfen und sagen wie ich es erreichen kann, dass die Eingabe mit einer 0 beginnen MUSS.

              Haben wir doch.

              LG,
              CK

            2. Hallo

              Warum muss hier über sinnlose Sachen diskutiert werden?

              Das du mehr oder weniger beratungsresistent bist war mir schon bei deiner Fragestellung klar. Dazu müssen nur mal die Anzahl von "ich" und "mein" in deiner kurzen Fragestellung gezählt werden. Dass passt immer wieder.

              Die Erläuterungen sind deshalb für die vielen anderen User, die deinen Beitrag und unsere Antworten lesen und in naher oder ferner Zukunft ihr eigenes Formular erstellen möchten. Die sollten halt gleich auf die Problematik von zu starken Einschränkungen bei dem Ausfüllen von Formularfeldern hingewiesen werden.

              So ein Forum ist halt öffentlich und wird von vielen Leuten gelesen. Deshalb ist es durchaus angebracht bei Lösungsansätzen auch auf die damit verbundenen Probleme hinzuweisen.

              Gruss

              MrMurphy

          2. Aloha ;)

            Yes! Wie unterschiedlich Telefonnummern (ohne Vanity zu berücksichtigen!) aussehen können hatten wir erst.

            Das bringt mich auf die Idee, dass es eventuell sinnvoll sein könnte, solche Codeschnipsel, die ja durchaus öfter Verwendung finden könnten, im Wiki zusammenzufassen.

            Klar entstehen aus solchen Dingern auch manchmal Praxis-Artikel, die dann im Wiki landen, oft aber nicht, weil man dann noch einiges dazu erklären müsste. Mir schwebt jetzt aber nicht vor, zu jedem Schnipsel eine größere Erklärung zu schreiben, sondern die Schnipsel einfach geordnet, so wie sie sind (ggf. mit kurzem Beschreibungssatz und Autorennennung), in einer "Schnipselsammlung" im Wiki unterzubringen.

            Mein Beweggrund ist folgender: Es ist viel einfacher, sowas aus dem Wiki raus zu verlinken (vor allem wenn das originale Posting schon länger im Archiv steckt), wenn wir da eine entsprechende Sammlung hätten, als zuerst das Forum abzugrasen.

            Quasi eine Art Zitatesammlung für Codeschnipsel.

            Meinungen?

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        2. Hallo,

          Dann ist das Unsinn. (089) 32168 fängt nicht mit 0 an. +49 89 32168 auch nicht.

          ganz ehrlich du bist genau so ein User den ich NICHT auf meiner Seite haben möchte. Entweder willst du es nicht verstehen oder du kapierst nicht was ich meine. Wenn ich schreibe eine Telefonnummer MUSS mit einer 0 beginnen, warum kommst du jetzt mit (089). Lass doch einfach die Klammern weg und gut ist. Wenn ich in Excel z.B. eine Eingabe über den FX Manger mache muss ich mich GANZ GENAU an die Schreibweise halten, mache ich das nicht kommt als Ergebnis ein #### raus oder Excel knallt mir irgendeine Fehlermeldung um die Ohren.

          Ich werde darüber auch nicht weiter diskutieren. Meine Nummer MUSS mit einer 0 beginnen die Menschen die das nicht wollen oder kapieren können gerne oben rechts das X drücken.

          1. Moin!

            Ich werde darüber auch nicht weiter diskutieren.

            Musst Du nicht. Machst Du aber. Verstehe bitte, dass wir Dir helfen wollen. Es geht nicht darum, Dich als Dumm hinzustellen oder zu entehren oder was auch immer. Es ist nichts persönliches.

            Meine Nummer MUSS mit einer 0 beginnen die Menschen die das nicht wollen oder kapieren können gerne oben rechts das X drücken.

            Verstehe bitte, dass es z.B. genug Menschen gibt, die sich nicht mal die eigene Telefonnummer merken können, irgendwo neu sind oder die Nummer aus anderen Gründen mit copy & paste einfügen wollen oder eben nicht noch ein Handbuch lesen wollen, wie Dein Kontaktformular (um sowas wird es wohl gehen) zu bedienen ist. Ich habe gerade erst gestern LG per Email um die Ohren gehauen, dass deren "Kontaktformular" ein "Kontaktverhinderungsformular" ist.

            Das zeigt auch auf was passiert:

            Entweder verlierst oder verärgerst Du Interessenten (was nicht der Zweck der Webseite, aber der Effekt Deines Verlangens ist). Oder Du hast mehr Kosten und wirst mehr gestört, weil die Interessenten z.B. kurzerhand anrufen. Und Dir bei der Gelegenheit ihre "etwas geminderte Begeisterung" übermitteln, was Dich dann jedes mal 2-5 Minuten (Arbeits-)zeit kostet. Und die Verärgerung des Interessenten/Kunde nur noch tiefer in sein Gedächtnis brennt.

            Wenn dass das ist, was Du willst, dann mach das so wie Du es willst.

            Jörg Reinholz

            1. Hallo,

              Verstehe bitte, dass es z.B. genug Menschen gibt, die sich nicht mal die eigene Telefonnummer merken können, irgendwo neu sind oder die Nummer aus anderen Gründen mit copy & paste einfügen wollen oder eben nicht noch ein Handbuch lesen wollen, wie Dein Kontaktformular (um sowas wird es wohl gehen) zu bedienen ist. Ich habe gerade erst gestern LG per Email um die Ohren gehauen, dass deren "Kontaktformular" ein "Kontaktverhinderungsformular" ist.

              was bringt mir das aber wenn ich folgende Nummern in meiner Datenbank habe:

              089 - xxx 089-xxx 089xxx (089) - xxx (089)-xxx (089)xxx +49089 +4989 +49 89 +49 089

              wahrscheinlich gibt es noch andere Schreibweisen. Wenn ich jetzt eine Ausgabe aller Telefonnummern mache schaut es aus, wie wenn ich etwas gesoffen hätte, es ist keine klare Struktur drin. JA es kommt mir sehr auf das Design drauf an, bei mir MUSS alles schön untereinander stehen. Ganz ehrlich bei so einer Ausgabe bekomme ich das kotzen und mir macht es kein Spaß auch nur 0 Minuten weiter an der Seite etwas zu machen.

              Wenn ich damit auch User abschrecke bin ich noch immer Inhaber der Seite und kann entscheiden wie ich meine Daten haben möchte? Außerdem soll z.B. mit der Nummer später weiter gearbeitet werden, also müsste ICH selber in die Datenbank und JEDE Nummer von Hand ändern, ganz klasse.

              1. Hallo Jule,

                was bringt mir das aber wenn ich folgende Nummern in meiner Datenbank habe: [...]

                Was hindert dich daran vor der Eintragung in die Datenbank die Telefon-Nr zu normalisieren? Das ist doch ein Task, den eine Maschine gut erledigen kann, warum bürdest du es dem User auf?

                LG,
                CK

              2. Moin!

                also müsste ICH selber in die Datenbank und JEDE Nummer von Hand ändern, ganz klasse.

                Nein! Das kann in den allermeisten Fällen die Software für Dich machen. Du solltest die gewiss nicht wahlfrei verlinkten Beiträge lesen.

                Jörg Reinholz

                1. Hallo,

                  Nein! Das kann in den allermeisten Fällen die Software für Dich machen. Du solltest die gewiss nicht wahlfrei verlinkten Artikel lesen.

                  diesen Artikel habe ich mir vorhin schon angeschaut. Da kommen Funktionen drin vor und davon habe ich keine Ahnung. Ich habe gerade erst gelernt wie man mit mysqli Daten in die Datenbank bekommt und diese wieder ausgeben kann.

                  1. Moin!

                    Da kommen Funktionen drin vor und davon habe ich keine Ahnung.

                    Ich hatte als Kind auch keine Ahnung von Spielzeugeisenbahnen, Weckern und dergleichen. Also hab ich schon mit 4 Jahren herausgefunden, wie man an Papas Werkzeug kommt und angefangen, das Zeug auseinander zu nehmen. Und mich wie ein König gefreut, wenn mir irgend was geschenkt hat, dass aus mehr als 5 Teilen bestand. Und wie ein Kaiser, wenn ich Papas Versuche, das Werkzeug kindersicher unterzubringen, durch Stapeln und Klettern ad absurdum führen konnte.

                    Anfangs hatte ich mit dem wieder Zusammenbauen so meine Probleme...

                    So ist es auch mit dem Skript. Nimm es, zerleg es, baue es neu zusammen, spiel damit. Du willst was machen? Dann lerne wie das geht.

                    Anders ausgedrückt: lerne.

                    Jörg Reinholz

                2. Hallo,

                  Nein! Das kann in den allermeisten Fällen die Software für Dich machen. Du solltest die gewiss nicht wahlfrei verlinkten Beiträge lesen.

                  oh das funktioniert ja wirklich :O

                  Original: (089)123456789 Geklärt: 089123456789

                  Darf ich den Code denn verwenden?

                  Und wäre es bei der Ausgabe später möglich dass ich aus 089123456789 wieder ein vernünftiges lesbares Format mache? 089 - 123456789

                  1. Moin!

                    oh das funktioniert ja wirklich :O

                    Naja. Ist ja von mir.

                    Darf ich den Code denn verwenden?

                    Mal überlegen. Ich habe den Code in einem frei zugänglichen Forum veröffentlicht. Ich habe meine Funktion bequemerweise mit (m)einem Präfix "ftx_" versehen. Ich habe einen Unittest hinzugefügt. Ich habe nicht hingeschrieben, das ist mein Eigentum, wer es benutzt soll 1,8 Mio Dollares an mich latzen.

                    Ich würde also sagen: Ja.

                    Und wäre es bei der Ausgabe später möglich dass ich aus 089123456789 wieder ein vernünftiges lesbares Format mache? 089 - 123456789

                    Nicht wirklich, denn das wäre "teuer". Weil Du die Nummer gegen eine Liste von Vorwahlen testen müsstest, die auch noch aktuell gehalten werden müssen.

                    Programm:

                    für jede Vorwahl aus Liste {
                       beginnt die Nummer mit Vorwahl, dann {
                          ersetze die Vorwahl in der Nummer durch die Vorwahl und " - ";
                          breche Schleife ab;
                       } ende dann
                    } ende schleife
                    

                    Trick: Speichere die "geklärte" Nummer und die eingegebene. Gib die eingegebene als "lesbare" aus. Hintergrund meines Skriptes ist übrigens Roger Router, welches (zumindest früher) bei Faxnummern mit jedem anderen Inhalt als Ziffern abstürzte...

                    Jörg Reinholz

                    1. Hallo,

                      Trick: Speichere die "geklärte" Nummer und die eingegebene. Gib die eingegebene als "lesbare" aus. Hintergrund meines Skriptes ist übrigens Roger Router, welches (zumindest früher) bei Faxnummern mit jedem anderen Inhalt als Ziffern abstürzte...

                      kann sein ich verstehe dich hier nicht richtig, aber dann wären wir ja wieder da, wo wir Angefangen haben? Ich speichere die geklärte und die eingegebene Nummer in meiner Datenbank, soll dann aber die eingegebene Nummer wieder ausgeben lassen? Dann habe ich ja schon wieder ein unterschiedliches Format? Genau das möchte ich ja nicht in meiner Übersicht haben. Alle Nummern sollten schön mit einer 0 beginnen, nach der Vorwahl ein Leerzeichen, dann ein - dann wieder ein Leerzeichen und dann die Hauptnummer. So habe ich eine schöne Ordnung.

                      1. Moin!

                        Alle Nummern sollten schön mit einer 0 beginnen, nach der Vorwahl ein Leerzeichen, dann ein - dann wieder ein Leerzeichen und dann die Hauptnummer. So habe ich eine schöne Ordnung.

                        Tja, dann wirst Du nicht umhinkommen, die Nummern mit dem Skript zu "normalsieren" und dann gegen alle Vorwahlen zu testen um die Leerzeichen einzufügen. Was noch leicht ist, wenn es nur deutsche Nummern sind.

                        Jörg Reinholz

                        1. Hallo,

                          Tja, dann wirst Du nicht umhinkommen, die Nummern mit dem Skript zu "normalsieren" und dann gegen alle Vorwahlen zu testen um die Leerzeichen einzufügen. Was noch leicht ist, wenn es nur deutsche Nummern sind.

                          dann bleibe ich bei meinem Vorhaben dem User zu sagen was er eintragen muss. Ich wusste es dass diese Diskussion leider nichts bringt.

                          1. Aloha ;)

                            Tja, dann wirst Du nicht umhinkommen, die Nummern mit dem Skript zu "normalsieren" und dann gegen alle Vorwahlen zu testen um die Leerzeichen einzufügen. Was noch leicht ist, wenn es nur deutsche Nummern sind.

                            dann bleibe ich bei meinem Vorhaben dem User zu sagen was er eintragen muss. Ich wusste es dass diese Diskussion leider nichts bringt.

                            ?!?

                            Auch dann hast du nachher auf deinem Datenblatt keine schöne Ordnung. Auch dann können Nummern noch mit 00 beginnen. Auch dann kann internationale Notation und nationale Notation verwendet werden.

                            Da wäre es definitiv die bessere Alternative, die Normalisierung vorzunehmen, wie Jörg sie vorschlug und keine Anpassung der Ausgabe vorzunehmen.

                            Wobei ich ziemlich überzeugt bin, dass du die Vorteile nicht sehen wirst. Das ist nämlich leider so, wenn man auf seiner Meinung festsitzt und grundsätzlich nicht bereit ist, einen Blick über den Tellerrand zu wagen - und anders kann ich es leider nicht deuten, wenn ich mir ansehe, wie besessen du hier das Haar in der Hochzeitssuppe suchst, nur um danach doch den Haferschleim zu bestellen, von dem dir der Kellner mit gutem Grund abgeraten hat.

                            Grüße,

                            RIDER

                            --
                            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                    2. @@Jörg Reinholz

                      Nicht wirklich, denn das wäre "teuer". Weil Du die Nummer gegen eine Liste von Vorwahlen testen müsstest, die auch noch aktuell gehalten werden müssen.

                      Die Bundesnetzagentur bietet eine solche Liste an – als PDF.

                      WTF? Soll man das jetzt abtippen, damit man das in verwertbarer Form hat? OCR?

                      LLAP 🖖

                      --
                      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                      1. Hallo,

                        Die Bundesnetzagentur bietet eine solche Liste an – als PDF.

                        danke für den Link. Die Nummern schreibe ich mir raus. Sind ja "nur" 99 Seiten. Vielleicht kann ich hier mit Excel eine CSV Datei erstellen.

                        1. Aloha ;)

                          Die Bundesnetzagentur bietet eine solche Liste an – als PDF.

                          danke für den Link. Die Nummern schreibe ich mir raus. Sind ja "nur" 99 Seiten. Vielleicht kann ich hier mit Excel eine CSV Datei erstellen.

                          Mal ohne Flax: Offenbar ist die weitaus größte Zahl an gültigen deutschen Vorwahlen vierstellig (ohne Null). Deutlich. Warum nicht nur noch auf die Vorwahlen prüfen, die zwei-, drei-, oder fünfstellig sind? Diese Liste ist deutlich kürzer, da ist sogar der Aufwand zum Abschreiben noch überschaubar. Du könntest damit prüfen, ob die Vorwahl drei- oder fünfstellig ist und ansonsten eine vierstellige annehmen, sofern es sich um eine deutsche Nummer handelt.

                          Im Fall Mobilfunkt (01xx) ist es afaik legitim, dreistellige Vorwahl anzunehmen. Die 700, 800 und 900 nicht vergessen. Damit sollte alles abgedeckt sein.

                          Grüße,

                          RIDER

                          --
                          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                          1. Hallo,

                            Mal ohne Flax: Offenbar ist die weitaus größte Zahl an gültigen deutschen Vorwahlen vierstellig (ohne Null). Deutlich. Warum nicht nur noch auf die Vorwahlen prüfen, die zwei-, drei-, oder fünfstellig sind? Diese Liste ist deutlich kürzer, da ist sogar der Aufwand zum Abschreiben noch überschaubar. Du könntest damit prüfen, ob die Vorwahl drei- oder fünfstellig ist und ansonsten eine vierstellige annehmen, sofern es sich um eine deutsche Nummer handelt.

                            der Ansatz ist eigentlich gut!

                            Im Fall Mobilfunkt (01xx) ist es afaik legitim, dreistellige Vorwahl anzunehmen. Die 700, 800 und 900 nicht vergessen. Damit sollte alles abgedeckt sein.

                            Fast: Vergiss nicht, dass im 01er-Block auch Sonderrufnummern sind, die - technisch betrachtet - vierstellige Vorwahlen haben, etwa 01805. Die 0190er-Nummern sollten ja durch den 0900er-Block ersetzt werden; ob existierende 0190er-Nummern umgestellt wurden oder ob sie "Bestandsschutz" haben, weiß ich aber nicht.
                            Das sei nur der Vollständigkeit halber erwähnt.

                            Ciao,
                             Martin

                          2. Hi,

                            Mal ohne Flax: Offenbar ist die weitaus größte Zahl an gültigen deutschen Vorwahlen vierstellig (ohne Null). Deutlich. Warum nicht nur noch auf die Vorwahlen prüfen, die zwei-, drei-, oder fünfstellig sind? Diese Liste ist deutlich kürzer, da ist sogar der Aufwand zum Abschreiben noch überschaubar.

                            Wieso eigentlich abschreiben?

                            Select All, Copy, Text-Editor, Paste. Suche nach Zeilen ohne Ziffer am Anfang (z.B. per ^[^0-9]), diese markieren und löschen, erstes Leerzeichen pro Zeile durch Tab (oder anderes geeignetes Trennzeichen) ersetzen.

                            Grade durchprobiert, war in deutlich unter 1 Minute passiert.

                            cu,
                            Andreas a/k/a MudGuard

                          3. @@Camping_RIDER

                            Mal ohne Flax: Offenbar ist die weitaus größte Zahl an gültigen deutschen Vorwahlen vierstellig (ohne Null). Deutlich. Warum nicht nur noch auf die Vorwahlen prüfen, die zwei-, drei-, oder fünfstellig sind? Diese Liste ist deutlich kürzer

                            Eine (Key/Value)-Liste wie

                            {
                            	⋮
                            	"30":"Berlin",
                            	"3301":"Oranienburg",
                            	"3302":"Hennigsdorf",
                            	"3303":"Birkenwerder",
                            	"3304":"Velten",
                            	"33051":"Nassenheide",
                            	"33053":"Zehlendorf Kr Oberhavel",
                            	"33054":"Liebenwalde",
                            	"33055":"Kremmen",
                            	"33056":"Mühlenbeck Kr Oberhavel",
                            	"3306":"Gransee",
                            	"3307":"Zehdenick",
                            	"33080":"Marienthal Kr Oberhavel",
                            	"33082":"Menz Kr Oberhavel",
                            	"33083":"Schulzendorf Kr Oberhavel",
                            	"33084":"Gutengermendorf",
                            	"33085":"Seilershof",
                            	"33086":"Grieben Kr Oberhavel",
                            	"33087":"Bredereiche",
                            	"33088":"Falkenthal",
                            	"33089":"Himmelpfort",
                            	"33093":"Fürstenberg Havel",
                            	"33094":"Löwenberg",
                            	"331":"Potsdam",
                            	⋮
                            }
                            

                            ist wohl nicht die beste Datenstruktur, da sucht man sich dumm und dähmlich.

                            Man kann sich die Daten aber in einen Baum umformen:

                            {
                            	"1": { … },
                            	"2": { … },
                            	"3": {
                            		"0": "Berlin",
                            		"3": {
                            			"0": {
                            				"1":"Oranienburg",
                            				"2":"Hennigsdorf",
                            				"3":"Birkenwerder",
                            				"4":"Velten",
                            				"5": {
                            					"1":"Nassenheide",
                            					"3":"Zehlendorf Kr Oberhavel",
                            					"4":"Liebenwalde",
                            					"5":"Kremmen",
                            					"6":"Mühlenbeck Kr Oberhavel"
                            				},
                            				"6": "Gransee",
                            				"7": "Zehdenick",
                            				"8": {
                            					"0":"Marienthal Kr Oberhavel",
                            					"2":"Menz Kr Oberhavel",
                            					"3":"Schulzendorf Kr Oberhavel",
                            					"4":"Gutengermendorf",
                            					"5":"Seilershof",
                            					"6":"Grieben Kr Oberhavel",
                            					"7":"Bredereiche",
                            					"8":"Falkenthal",
                            					"9":"Himmelpfort"
                            				},
                            				"9": {
                            					"3":"Fürstenberg Havel",
                            					"4":"Löwenberg"
                            				}
                            			},
                            			"1": "Potsdam",
                            			"2": { … },
                            			⋮
                            		},
                            		"4": { … },
                            		⋮		
                            	},
                            	"4": { … },
                            	⋮		
                            }
                            

                            Dann holt man sich aus der Telefonnummer (ohne 0 bzw. +49) das erste Zeichen, bspw. 3. Wenn mal dafür als Wert einen String erhält, hat man die komplette Vorwahl gefunden. Ist hier aber nicht der Fall, sondern man erhält ein Objekt (einen Unterbaum). Also das nächste Zeichen der Telefonnummer lesen, bspw. 0. Der dazugehörige Wert ist "Berlin". Fertig.

                            Wäre nach der ersten 3 noch eine 3 gekommen, würde man die nächste Ziffer aus der Telefonnummer holen, bspw. eine 0. Dafür erhält man wieder ein Objekt, also weiter, bspw. eine 8. Immer noch nicht beim Blatt angekommen; nächste Ziffer holen, bspw. 9. Das ergibt "Himmelpfort". Man ist beim Weihnachtsmann angekommen.

                            LLAP 🖖

                            --
                            Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                            1. Moin!

                              Man kann sich die Daten aber in einen Baum umformen:

                              Sieht gut aus und dürfte die Anzahl der notwendigen Vergleichsoperationen enorm reduzieren.

                              Ich werde mal damit herumbasteln.

                              Oder besser hieraus

                              Jörg Reinholz

                              1. Also.

                                1. http://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/ONVerzeichnisse/ONBVerzeichnis/B-ListeOrtsnetzenumerisch.pdf?__blob=publicationFile&v=3

                                herunterladen. (wget ist eine gute Idee...)

                                2. Wer Linux und die pdf-Tools installiert hat:

                                pdftotext -raw B-ListeOrtsnetzenumerisch.pdf
                                

                                Resultat ist eine neue Datei B-ListeOrtsnetzenumerisch.txt

                                3. Schnell und schmutzig:

                                <?php
                                define ( 'INFILE',       '/tmp/B-ListeOrtsnetzenumerisch.txt' );
                                define ( 'OUTFILE_CSV',  '/tmp/vw.csv' );
                                define ( 'OUTFILE_JSON', '/tmp/vw.json');
                                define ( 'OUTFILE_PHP', '/tmp/vw.var');
                                #define ( 'OUTFILE_JSON', false);
                                
                                define('CSV_TR','|') ;
                                define('CSV_NL',"\n");
                                
                                $arRaw=file(INFILE) or die ('Fatal: ' . INFILE . ' nicht lesbar.');
                                $vw_array=false;
                                
                                        if (OUTFILE_CSV) {
                                            file_put_contents(OUTFILE_CSV, '', LOCK_EX);
                                        }
                                
                                
                                while ( $row = array_shift($arRaw) )  {
                                    $trow=trim($row);
                                    #echo $row, "\n";
                                    $vw=false;
                                    $bezirk=false;
                                    if ( preg_match('/^0\d{2,4}/', $row) ) {
                                        #Dieses Zeile ist eine Vorwahl
                                        $vw     = trim($row);
                                        # es gibt tatsächlich Einträge, da ist der Bezirk in einer Zeile mit der PLZ:
                                        $parts=false;
                                        $parts=preg_split('/ +/', $vw);
                                        if ( isset($parts[1]) ) {
                                            $vw=trim($parts[0]);
                                            $bezirk=trim($parts[1]);
                                        } else {
                                            $bezirk = array_shift($arRaw);
                                            $bezirk = trim($bezirk);
                                        }
                                
                                        $arVw=str_split($vw,1);
                                
                                        $arVwcount=count($arVw);
                                        echo $vw, ' | ', $arVwcount, ' | ', $bezirk , "\n";
                                
                                        if ( 5 == $arVwcount ) {
                                            $vw_array[$arVw[0]][$arVw[1]][$arVw[2]][$arVw[3]][$arVw[4]]['txt'] = $bezirk;
                                        } else if ( 4 == $arVwcount ) {
                                            $vw_array[$arVw[0]][$arVw[1]][$arVw[2]][$arVw[3]]['txt'] = $bezirk;
                                        } else if ( 3 == $arVwcount ) {
                                            $vw_array[$arVw[0]][$arVw[1]][$arVw[2]]['txt'] = $bezirk;
                                        }
                                
                                        if (OUTFILE_CSV) {
                                            file_put_contents(OUTFILE_CSV, $vw . CSV_TR . $bezirk . CSV_NL, FILE_APPEND|LOCK_EX);
                                        }
                                    }
                                }
                                
                                if (OUTFILE_JSON) {
                                    file_put_contents(OUTFILE_JSON, json_encode ($vw_array), LOCK_EX);
                                }
                                if (OUTFILE_PHP) {
                                    file_put_contents(OUTFILE_PHP, '<?php $ar_vw_parts_ort = ' . var_export($vw_array, true) . ';', LOCK_EX);
                                }
                                
                                ##### Test:
                                include(OUTFILE_PHP);
                                echo $ar_vw_parts_ort[0][8][9]['txt'], "\n";
                                
                                

                                Download des Zeugs als zip, 136kb.

                                1. Moin!

                                  So. Es gibt tatsächlich Bezirke mit 5 signifikanten Ziffern als Vorwahl... 039856 - Beenz Das machte einen Bugfix erforderlich.

                                  Verbesserte Version:

                                  Download des Zeugs als zip, 190kb mit PDF der Bundesnetzagentur und daraus mit pdftotext genierter Textdatei.

                                  Die neue Version exportiert:

                                  • simples csv: (Vorwahl|Bezirk)
                                  • simples json: (arVorwahl[012345]=Bezirk)
                                  • simples php: (arVorwahl[012345]=Bezirk)
                                  • extended json (arVorwahl[0][1][2][3][4][5])=Bezirk
                                  • extended php (arVorwahl[0][1][2][3][4][5])=Bezirk

                                  Neue Funktionen: (Für alle Ausgabetypen)

                                  • Jeweils mit und ohne führende Null in der Vorwahl
                                  • Der var-export für die PHP-Datei kann "gepackt" werden. (Überflüssige Zeilenenden und Spaces werden dabei gelöscht. Ersparnis ca. 2/3 der Bytes.

                                  Einstellungen bitte im Konfigurationsteil vornehmen. Das Skript ist dazu gedacht, als cli ausgeführt zu werden.

                                  Jörg Reinholz

                            2. Moin!

                              Jörg Reinholz

                            3. Tach!

                              Eine (Key/Value)-Liste wie [...] ist wohl nicht die beste Datenstruktur, da sucht man sich dumm und dähmlich.

                              Man kann sich die Daten aber in einen Baum umformen:

                              Bei 5202 Ortsvorwahlen in .de und dazu - sagen wir mal - 100 anderen (01x) ist der Aufwand, ein Programm zur Umformung der Daten zu erstellen um ein Vielfaches an Personalkosten teurer als das bisschen Suchleistung, die die simple Listensuche generiert.

                              dedlfix.

                              1. Aloha ;)

                                Eine (Key/Value)-Liste wie [...] ist wohl nicht die beste Datenstruktur, da sucht man sich dumm und dähmlich.

                                Man kann sich die Daten aber in einen Baum umformen:

                                Bei 5202 Ortsvorwahlen in .de und dazu - sagen wir mal - 100 anderen (01x) ist der Aufwand, ein Programm zur Umformung der Daten zu erstellen um ein Vielfaches an Personalkosten teurer als das bisschen Suchleistung, die die simple Listensuche generiert.

                                Das ist ungefähr das was ich unter Erwähnung der binären Suche auch sagen wollte.

                                Immerhin ging es in diesem Subthread ursprünglich genau darum, Aufwand auf Seiten der Eingabedaten und ihrer Erlangung/Formatierung einzusparen, auch wenn Gunnar bei entsprechender Fragestellung Recht hat mit seiner Datenstruktur.

                                Grüße,

                                RIDER

                                --
                                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                1. Tach!

                                  Das ist ungefähr das was ich unter Erwähnung der binären Suche auch sagen wollte.

                                  Das Problem hierbei ist, dass die Suche quasi umgekehrt stattfinden muss. Der Suchbegriff befindet sich in der Liste. Ansonsten müsste erst ein Teil der Telefonnummer abgeschnitten werden, um damit die Liste zu befragen. Da der Teil aber in der Länge variabel ist, ist das etwas ungünstig.

                                  Immerhin ging es in diesem Subthread ursprünglich genau darum, Aufwand auf Seiten der Eingabedaten und ihrer Erlangung/Formatierung einzusparen, auch wenn Gunnar bei entsprechender Fragestellung Recht hat mit seiner Datenstruktur.

                                  Manchmal entscheidet sich der Optimizer von MySQL trotz vorhandenem Index, einen Full-Table-Scan auf die Tabelle zu fahren - zum Beispiel wenn die Datenmenge zu klein ist, als dass sich die Verwendung des Index lohnen tät.

                                  dedlfix.

                                  1. Aloha ;)

                                    Das ist ungefähr das was ich unter Erwähnung der binären Suche auch sagen wollte.

                                    Das Problem hierbei ist, dass die Suche quasi umgekehrt stattfinden muss. Der Suchbegriff befindet sich in der Liste. Ansonsten müsste erst ein Teil der Telefonnummer abgeschnitten werden, um damit die Liste zu befragen. Da der Teil aber in der Länge variabel ist, ist das etwas ungünstig.

                                    Ja, deshalb auch drei Suchen - mit zwei, drei und fünf Ziffern (vier Ziffern dann als Ausschlussverfahren). Macht drei binäre Suchen mit je einem Aufwand von 10 Vergleichen. Das ist noch überschaubar. Aber klar, es ist ein Nachteil.

                                    Immerhin ging es in diesem Subthread ursprünglich genau darum, Aufwand auf Seiten der Eingabedaten und ihrer Erlangung/Formatierung einzusparen, auch wenn Gunnar bei entsprechender Fragestellung Recht hat mit seiner Datenstruktur.

                                    Manchmal entscheidet sich der Optimizer von MySQL trotz vorhandenem Index, einen Full-Table-Scan auf die Tabelle zu fahren - zum Beispiel wenn die Datenmenge zu klein ist, als dass sich die Verwendung des Index lohnen tät.

                                    Du sprichst da ein Problem an, das ich in dieser Form auch sehe, wenn wir von PHP sprechen. PHP befindet sich auf einer sehr hohen Abstraktionsstufe, im Vergleich zu anderen Hochsprachen. Gerade in PHP mit den sehr potenten Arrays ist es für mich gar nicht mehr intuitiv einschätzbar, wie der Aufwand eines Arrayzugriffs skaliert. Wenn wir über andere Hochsprachen sprechen (Java, C,...) dann wissen wir da, wie genau ein Array gespeichert wird und wie der Zugriff auf ein Array erfolgt - diese Arrays sind auch deutlich primitiver. Von Arrays in PHP habe ich kein so klares, eindeutiges Bild mehr von seiner Speicherabbildung. Und deshalb auch keine intuitive Einschätzung mehr davon, wie teuer oder billig die verschiedenen Zugriffsarten auf unterschiedliche Arrays ausfallen.

                                    Was mich zu meiner Kernthese bringt: Um Datenstrukturen zu optimieren muss man ganz genau wissen, wie die Sprache mit den verschiedenen Datenstrukturen intern umgeht. Da ich das bei PHP nicht einschätzen kann mache ich mir außer in eklatanten Ausnahmefällen oft nichtmal allzuviele Gedanken über effizientere Datenstrukturen (immerhin ist die Effizienzbetrachtung hier auch definitiv nicht trivial).

                                    Grüße,

                                    RIDER

                                    --
                                    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                    1. Tach!

                                      Das Problem hierbei ist, dass die Suche quasi umgekehrt stattfinden muss. Der Suchbegriff befindet sich in der Liste. Ansonsten müsste erst ein Teil der Telefonnummer abgeschnitten werden, um damit die Liste zu befragen. Da der Teil aber in der Länge variabel ist, ist das etwas ungünstig.

                                      Ja, deshalb auch drei Suchen - mit zwei, drei und fünf Ziffern (vier Ziffern dann als Ausschlussverfahren). Macht drei binäre Suchen mit je einem Aufwand von 10 Vergleichen. Das ist noch überschaubar. Aber klar, es ist ein Nachteil.

                                      Viel zu aufwendig bei der geringen Datenmenge. Einfach durchlaufen und den Schlüssel mit dem Anfang der Telefonnummer vergleichen.

                                      Was mich zu meiner Kernthese bringt: Um Datenstrukturen zu optimieren muss man ganz genau wissen, wie die Sprache mit den verschiedenen Datenstrukturen intern umgeht. Da ich das bei PHP nicht einschätzen kann mache ich mir außer in eklatanten Ausnahmefällen oft nichtmal allzuviele Gedanken über effizientere Datenstrukturen (immerhin ist die Effizienzbetrachtung hier auch definitiv nicht trivial).

                                      Optimieren wenn Bedarf besteht, ansonsten YAGNI.

                                      dedlfix.

                                      1. Aloha ;)

                                        Das Problem hierbei ist, dass die Suche quasi umgekehrt stattfinden muss. Der Suchbegriff befindet sich in der Liste. Ansonsten müsste erst ein Teil der Telefonnummer abgeschnitten werden, um damit die Liste zu befragen. Da der Teil aber in der Länge variabel ist, ist das etwas ungünstig.

                                        Ja, deshalb auch drei Suchen - mit zwei, drei und fünf Ziffern (vier Ziffern dann als Ausschlussverfahren). Macht drei binäre Suchen mit je einem Aufwand von 10 Vergleichen. Das ist noch überschaubar. Aber klar, es ist ein Nachteil.

                                        Viel zu aufwendig bei der geringen Datenmenge. Einfach durchlaufen und den Schlüssel mit dem Anfang der Telefonnummer vergleichen.

                                        Das sind dann aber ~1300 Vergleiche statt 30. Das macht sich im Zweifelsfall schon bemerkbar.

                                        Grüße,

                                        RIDER

                                        --
                                        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                        1. Tach!

                                          Viel zu aufwendig bei der geringen Datenmenge. Einfach durchlaufen und den Schlüssel mit dem Anfang der Telefonnummer vergleichen.

                                          Das sind dann aber ~1300 Vergleiche statt 30. Das macht sich im Zweifelsfall schon bemerkbar.

                                          Und? Da zuckt doch die CPU nicht mal mit der Wimper.

                                          $nummer = "081547112342";
                                          $liste = [];
                                          for ($i = 0; $i < 5300; $i++) {
                                              $liste["01" . $i] = "dummy";
                                          }
                                          
                                          echo microtime(1), "\n";
                                          foreach ($liste as $vorwahl => $ort) {
                                              if (substr($nummer, $vorwahl) === 0)) {
                                                  echo "gefunden\n";
                                              }
                                          }
                                          echo microtime(1), "\n";
                                          

                                          Die $nummer ist nicht in der Vorwahl-$liste enthalten, sie wird also vollständig durchlaufen. Selbst wenn du auf 530000 Vorwahlen erhöhst, wirst du keine Verzögerung merken.

                                          dedlfix.

                                          1. Aloha ;)

                                            Viel zu aufwendig bei der geringen Datenmenge. Einfach durchlaufen und den Schlüssel mit dem Anfang der Telefonnummer vergleichen.

                                            Das sind dann aber ~1300 Vergleiche statt 30. Das macht sich im Zweifelsfall schon bemerkbar.

                                            Und? Da zuckt doch die CPU nicht mal mit der Wimper.

                                            $nummer = "081547112342";
                                            $liste = [];
                                            for ($i = 0; $i < 5300; $i++) {
                                                $liste["01" . $i] = "dummy";
                                            }
                                            
                                            echo microtime(1), "\n";
                                            foreach ($liste as $vorwahl => $ort) {
                                                if (substr($nummer, $vorwahl) === 0)) {
                                                    echo "gefunden\n";
                                                }
                                            }
                                            echo microtime(1), "\n";
                                            

                                            Die $nummer ist nicht in der Vorwahl-$liste enthalten, sie wird also vollständig durchlaufen. Selbst wenn du auf 530000 Vorwahlen erhöhst, wirst du keine Verzögerung merken.

                                            Okay, ich gebe dir Recht. Das sind nicht die Maßstäbe, bei denen heutige Maschinen in die Knie gehen.

                                            Grüße,

                                            RIDER

                                            --
                                            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                          2. Moin!

                                            Kann das mal jemand prüfen? Dem Ergebnis nach ist der Test mit foreach und einem Komplettdurchlauf ca. 3 bis 4 mal schneller als 3 Zugriffe auf das Array mit 4300 Elementen. Ach wenn ich den Wertebereich um den Faktor 100 erhöht (und die "Vorwahl" verlängert) habe war das Ergebnis ähnlich.

                                            <?php
                                            
                                            $nummer = "0152991547112342";
                                            $liste = [];
                                            for ($i = 1000 ; $i < 5300; $i++) {
                                                $liste["01" . $i] = "dummy: 01".$i;
                                            }
                                            
                                            $ta=0;$fua=0;
                                            $tf=0;$fuf=0;
                                            
                                            for ($i=0; $i<1000000; $i++) {
                                            
                                                    $ende=0;
                                            	$start= microtime(1);
                                            	$suche=[4,5,6];
                                            	foreach ($suche as $l) {
                                            		$s=substr($nummer, 0, $l);
                                            		#echo "$l | $s | ", @$liste["$s"];
                                            		if ( isset($liste["$s"]) ) {
                                            			$ende=microtime(1);
                                            			$fa="gefunden: ".$liste["$s"];
                                            			$fua++;
                                            			break;
                                            		}
                                            	}
                                            	$ta = $ta + ($ende - $start);
                                            
                                            
                                            	$start= microtime(1);
                                                    $ende=0;  
                                            	foreach ($suche as $key=>$value) {
                                            		if ( 0==strpos($nummer,$key) ) {
                                            			$ende=microtime(1);
                                            			$ff= "gefunden: ".$liste["$s"];
                                            			$fuf++;
                                                    		break;
                                            		}
                                            	}
                                            	$tf = $tf + ($ende - $start);
                                            
                                            }
                                            echo "\n\nForEach-Zugriff: ", $tf*1000, "ms\n$ff\n$fuf\n";
                                            echo     "Array-Zugriff  : ", $ta*1000, "ms\n$fa\n$fua\n\n";
                                            

                                            Jörg Reinholz

                                            1. Aloha ;)

                                              Kann das mal jemand prüfen? Dem Ergebnis nach ist der Test mit foreach und einem Komplettdurchlauf ca. 3 bis 4 mal schneller als 3 Zugriffe auf das Array mit 4300 Elementen. Ach wenn ich den Wertebereich um den Faktor 100 erhöht (und die "Vorwahl" verlängert) habe war das Ergebnis ähnlich.

                                              Wenn ich das auf meinem billigen Webspace laufen lass ergibt sich (grob) das gleiche Bild.

                                              ForEach-Zugriff: 1199.8353004456ms
                                              gefunden: dummy: 015299
                                              1000000
                                              Array-Zugriff  : 2682.8827857971ms
                                              gefunden: dummy: 015299
                                              1000000
                                              

                                              Das legt nahe, dass Arrays von PHP noch einmal deutlich komplexer behandelt werden als ich bisher angenommen hatte - inklusive entsprechender nativer Optimierungen.

                                              Es scheint, dass der Overhead eines einzelnen Arrayzugriffs per Schlüssel sehr viel größer ist als der Gesamtaufwand eines sequentiellen Durchlaufens.

                                              Das legt nahe, dass auch Gunnars Datenstruktur u.U. vergleichsweise deutlich langsamer laufen könnte als angenommen, da hier auch einige Arrayzugriffe anhand eines Schlüssels erfolgen (der dann zwar eine Zahl ist, aber, naja...).

                                              In anderen Sprachen kann das durchaus anders aussehen - z.B. in Javascript, wo Arrays schlank sind und keine assoziativen Arrays möglich sind, da dürfte ein Zugriff über eine Baumstruktur deutlich schneller sein als ein Durchlaufen des Arrays. Noch krassere Erleichterungen durch die Baumstruktur / binäre Suche erwarte ich bei Sprachen wie Java oder C/C++, die noch weniger abstrahieren und damit transparente, abschätzbare Speicherverwaltung betreiben.

                                              Mein Fazit: Optimierungsversuche über Datenstrukturen (egal ob Baumstruktur oder binäre Suche) sind in PHP aufgrund des hohen Abstraktionsniveaus Makulatur.

                                              Grüße,

                                              RIDER

                                              --
                                              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                              1. Moin!

                                                Es scheint, dass der Overhead eines einzelnen Arrayzugriffs per Schlüssel sehr viel größer ist als der Gesamtaufwand eines sequentiellen Durchlaufens.

                                                Ja. Oder Jungs von Zend haben für foreach was ganz irres geproggt.

                                                Das legt nahe, dass auch Gunnars Datenstruktur u.U. vergleichsweise deutlich langsamer laufen könnte als angenommen, da hier auch einige Arrayzugriffe anhand eines Schlüssels erfolgen (der dann zwar eine Zahl ist, aber, naja...).

                                                Ich hab noch einen Test gemacht und das Zeug ungeschrieben, so dass keine assoziativen sondern klassische Arrays benutzt werden.

                                                Und siehe da ... der Zugriff aufs Array benötigt jetzt nicht mehr die dreifache Zeit, sondern nur das 1,5 fache von foreach,

                                                Javascript, wo Arrays schlank sind und keine assoziativen Arrays möglich

                                                Die heissen da Objekte :-)

                                                Jörg Reinholz

                                                1. Aloha ;)

                                                  Ich hab noch einen Test gemacht und das Zeug ungeschrieben, so dass keine assoziativen sondern klassische Arrays benutzt werden.

                                                  Und siehe da ... der Zugriff aufs Array benötigt jetzt nicht mehr die dreifache Zeit, sondern nur das 1,5 fache von foreach

                                                  Sehr schön. Das bestätigt zwei Vermutungen. a) klassische Arrays sind in PHP scheinbar grundlegend andere Objekte als assoziative und sehen nur ähnlich aus, b) auch einfache Array-Zugriffe sind mit erheblichem Overhead belastet (denn der Aufwand von foreach sollte - der naiven Theorie nach und ohne Einbezug von Overhead - etwa zehnmal so groß sein wie die binäre Suche). Auch klassische Arrays sind damit in PHP keinesfalls so schlank wie in anderen Sprachen (wenn auch schlanker als ihre assoziativen Kollegen).

                                                  Javascript, wo Arrays schlank sind und keine assoziativen Arrays möglich

                                                  Die heissen da Objekte :-)

                                                  Ja und nein :P Du hast recht, Javascript-Objekte erfüllen in Javascript alle Funktionalitäten assoziativer Arrays, wie man sie aus PHP kennt. Nein, weil Javascript-Objekte mächtiger sind als assoziative PHP-Arrays ;)

                                                  Grüße,

                                                  RIDER

                                                  --
                                                  Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                                  1. Moin!

                                                    Auch klassische Arrays sind damit in PHP keinesfalls so schlank wie in anderen Sprachen (wenn auch schlanker als ihre assoziativen Kollegen).

                                                    ich habs (noch) nicht installiert. Aber PHP 7 soll sehr viel schneller werden.

                                                    Zitat:

                                                    "PHP 7 wird voraussichtlich eine um bis zu 30 Prozent geringere Ausführungszeit als PHP 5 haben, da Hashtabellen neu implementiert wurden"

                                                    Verweis auf Quelle bei Golem

                                                    Jörg Reinholz

                                                    1. Moin!

                                                      ich habs (noch) nicht installiert. Aber PHP 7 soll sehr viel schneller werden.

                                                      (noch)

                                                      Nachdem ich rudelweise dev-Pakete nachinstalliert habe (und einmal auf ein ersetzendes zurückgreifen musste) läuft jetzt make.

                                                      Ich hoffe, ich kann bald mit Zahlen dienen.

                                                      Jörg Reinholz

                                                      1. Moin!

                                                        1. Normale numerische Arrays:

                                                        php7 test.php (Arrays)

                                                        ForEach-Zugriff: 297.36685752869ms
                                                        gefunden: dummy: 011529
                                                        1000000
                                                        Array-Zugriff  : 364.30406570435ms
                                                        gefunden: dummy: 011529
                                                        1000000
                                                        
                                                        

                                                        php5 test.php (Arrays)

                                                        ForEach-Zugriff: 682.62100219727ms
                                                        gefunden: dummy: 011529
                                                        1000000
                                                        Array-Zugriff  : 1039.4954681396ms
                                                        gefunden: dummy: 011529
                                                        1000000
                                                        

                                                        Die haben nicht zu viel versprochen. Aber dennoch ist auch foreach schneller geworden, hat wohl auch profitiert ...

                                                        2. Assoziative Arrays:

                                                        php7 test.php (assoz. Arrays)

                                                        ForEach-Zugriff: 327.66079902649ms
                                                        gefunden: dummy: 015299
                                                        1000000
                                                        Array-Zugriff  : 708.22811126709ms
                                                        gefunden: dummy: 015299
                                                        1000000
                                                        

                                                        php5 test.php (assoz. Arrays)

                                                        ForEach-Zugriff: 637.17460632324ms
                                                        gefunden: dummy: 015299
                                                        1000000
                                                        Array-Zugriff  : 2011.0161304474ms
                                                        gefunden: dummy: 015299
                                                        1000000
                                                        

                                                        Jörg Reinholz

                                                        1. Moin!

                                                          Es gibt ja noch den HHVM und für Ubuntu Pakete.

                                                          2. Assoziative Arrays:

                                                          hhvm test.php (assoz. Arrays)

                                                          ForEach-Zugriff: 153.70440483093ms
                                                          gefunden: dummy: 015299
                                                          1000000
                                                          Array-Zugriff  : 575.68860054016ms
                                                          gefunden: dummy: 015299
                                                          1000000
                                                          

                                                          php7 test.php (assoz. Arrays)

                                                          ForEach-Zugriff: 327.66079902649ms
                                                          gefunden: dummy: 015299
                                                          1000000
                                                          Array-Zugriff  : 708.22811126709ms
                                                          gefunden: dummy: 015299
                                                          1000000
                                                          

                                                          php5 test.php (assoz. Arrays)

                                                          ForEach-Zugriff: 637.17460632324ms
                                                          gefunden: dummy: 015299
                                                          1000000
                                                          Array-Zugriff  : 2011.0161304474ms
                                                          gefunden: dummy: 015299
                                                          1000000
                                                          

                                                          Aber auch da ist foreach schneller.

                                                          Jörg Reinholz

                                              2. Hallo Camping_RIDER,

                                                Mein Fazit: Optimierungsversuche über Datenstrukturen (egal ob Baumstruktur oder binäre Suche) sind in PHP aufgrund des hohen Abstraktionsniveaus Makulatur.

                                                Nö, da kommt es auf die Skalierung drauf an. 5k Daten sind halt Peanuts. Schau dir das nochmal an, wenn du 5GB an Daten hast, dann wirst du sicherlich Unterschiede feststellen. Das O(log n) für dein binary search wird da ziemlich sicher einen grossen Unterschied produzieren.

                                                LG,
                                                CK

                                                1. Aloha ;)

                                                  Mein Fazit: Optimierungsversuche über Datenstrukturen (egal ob Baumstruktur oder binäre Suche) sind in PHP aufgrund des hohen Abstraktionsniveaus Makulatur.

                                                  Nö, da kommt es auf die Skalierung drauf an. 5k Daten sind halt Peanuts. Schau dir das nochmal an, wenn du 5GB an Daten hast, dann wirst du sicherlich Unterschiede feststellen. Das O(log n) für dein binary search wird da ziemlich sicher einen grossen Unterschied produzieren.

                                                  Aber nur dann, wenn O(log n) wirklich zutrifft und nicht durch Overhead des Arrayzugriffs zunichte gemacht wird. Jörgs Zahlen sprechen dafür, dass ein Durchlaufen mit foreach (eigentlich O(n), aber eben ohne explizite Arrayzugriffe) aus Gründen der internen Implementierung billiger ist als eine binäre Suche. So eine Aufwandsbetrachtung ist eben wirklich davon abhängig, wie teuer die verschiedenen einzelnen summierten "Elementaroperationen" sind.

                                                  Grüße,

                                                  RIDER

                                                  --
                                                  Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                                  1. Hallo Camping_RIDER,

                                                    Aber nur dann, wenn O(log n) wirklich zutrifft und nicht durch Overhead des Arrayzugriffs zunichte gemacht wird.

                                                    Der wird bei grösseren Datenmengen immer irrelevanter. Je nachdem, wie aufwendig ein Array-Zugriff ist verschiebt sich das nach hinten, aber früher oder später kann eine Komplexität O(n) mit O(log n) nicht mehr mithalten. Einfacher Test:

                                                    <?php
                                                    
                                                    $data = [];
                                                    $no_elements = 10000000;
                                                    $test_runs = 1000;
                                                    
                                                    for($i = 0; $i < $no_elements; ++$i) {
                                                      $data[] = $i;
                                                    }
                                                    
                                                    function bsearch($elem, $array) {
                                                      $upper = sizeof($array) - 1;
                                                      $lower = 0;
                                                    
                                                      while($upper >= $lower) {
                                                        $pos = floor(($upper + $lower) / 2);
                                                    
                                                        if ($array[$pos] < $elem) {
                                                          $lower = $pos + 1;
                                                        }
                                                        elseif($array[$pos] > $elem) {
                                                          $upper = $pos - 1;
                                                        }
                                                        else {
                                                          return true; // element found
                                                        }
                                                      }
                                                    
                                                      // nothing found
                                                      return false;
                                                    }
                                                    
                                                    function linear_search($elem, $array) {
                                                      $len = sizeof($array);
                                                    
                                                      foreach($array as $element) {
                                                        if($element == $elem) {
                                                          return true;
                                                        }
                                                      }
                                                    
                                                      return false;
                                                    }
                                                    
                                                    echo "test data generated, beginning with searching...\n";
                                                    
                                                    # first test binary search
                                                    $start = microtime(true);
                                                    
                                                    for($i = 0; $i < $test_runs; ++$i) {
                                                      bsearch(rand(0, $no_elements - 1), $data);
                                                    }
                                                    
                                                    $end = microtime(true);
                                                    
                                                    echo "bsearch: $test_runs test runs: ", $end - $start, "ms\n";
                                                    
                                                    
                                                    # now lets test linear search
                                                    $start = microtime(true);
                                                    
                                                    for($i = 0; $i < $test_runs; ++$i) {
                                                      linear_search(rand(0, $no_elements - 1), $data);
                                                    }
                                                    
                                                    $end = microtime(true);
                                                    
                                                    echo "linear search: $test_runs test runs: ", $end - $start, "ms\n";
                                                    
                                                    # eof
                                                    

                                                    Allerdings treten solche Unterschiede halt erst bei ausreichend grossen Datenmengen auf. 5k Daten ist nicht viel, deshalb siehst du da nichts ;-) bei 10 Mio Daten allerdings macht das schon einen Unterschied. Output meines Scripts:

                                                    test data generated, beginning with searching...
                                                    bsearch: 1000 test runs: 0.0059850215911865ms
                                                    linear search: 1000 test runs: 157.40451312065ms
                                                    

                                                    Falls dich sowas interessiert: solche Grundsätze lernt man in der Vorlesung Algorithmen und Datenstrukturen 1 (soweit ich weiss studierst du ja gerade Mathematik?). Das ist es auch, was Dedlfix mit „YAGNI“ meinte.

                                                    LG,
                                                    CK

                                                    EDIT: ich muss eins nochmal klarstellen:

                                                    Aber nur dann, wenn O(log n) wirklich zutrifft und nicht durch Overhead des Arrayzugriffs zunichte gemacht wird.

                                                    Der Aufwand für einen Array-Zugriff ist, unabhängig von den Kosten, konstant. Die Komplexität für das binary search ist also weiterhin O(log n), auch wenn die Kosten für einen Arrayzugriff grösser würden.

                                                    EDIT 2: huch, falsche File gepasted. Jetzt ist es der richtige Source.

                                                    1. Aloha ;)

                                                      Falls dich sowas interessiert: solche Grundsätze lernt man in der Vorlesung Algorithmen und Datenstrukturen 1 (soweit ich weiss studierst du ja gerade Mathematik?). Das ist es auch, was Dedlfix mit „YAGNI“ meinte.

                                                      ...oder in Einführung in die Informatik (das man hört, wenn man wie ich bescheuert ist und neben Mathematik und Physik noch zusätzlich Informatik studiert). ;)

                                                      Aber nur dann, wenn O(log n) wirklich zutrifft und nicht durch Overhead des Arrayzugriffs zunichte gemacht wird.

                                                      Der Aufwand für einen Array-Zugriff ist, unabhängig von den Kosten, konstant. Die Komplexität für das binary search ist also weiterhin O(log n), auch wenn die Kosten für einen Arrayzugriff grösser würden.

                                                      Das kommt auf die interne Implementierung des Array-Zugriffs an. Ich hielt es ursprünglich für möglich, dass der Overhead mit n skaliert; siehe dazu auch die Antwort auf deinen Nachtrag.

                                                      Grüße,

                                                      RIDER

                                                      --
                                                      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                                      1. Hallo,

                                                        ([...] wenn man wie ich bescheuert ist und neben Mathematik und Physik noch zusätzlich Informatik studiert). ;)

                                                        haben Mathematik und Informatik nicht sowieso eine sehr große Schnittmenge miteinander? Ich meine, zumindest dann, wenn man wirklich von der die Informatik als theoretische Wissenschaft spricht, und nicht von dem, was im Volksmund als Informatik verstanden wird.

                                                        Ich erinnere mich, dass ein Schulfreund von mir, von dem ich nun auch schon über 20 Jahre nichts mehr gehört habe, damals an der Uni Tübingen Informatik studiert hat. Und der hat sich mal den Jux erlaubt, die Studienpläne für Mathematik und Informatik akribisch zu vergleichen, und er fand nur sehr geringe Unterschiede.

                                                        Einer dieser Unterschiede, die er paradox fand, bestand darin, dass die Mathematik-Studenten ziemlich zu Anfang die Programmiersprache Pascal lernen sollten, während die Informatiker das nicht brauchten.

                                                        So long,
                                                         Martin

                                                        1. Aloha ;)

                                                          ([...] wenn man wie ich bescheuert ist und neben Mathematik und Physik noch zusätzlich Informatik studiert). ;)

                                                          haben Mathematik und Informatik nicht sowieso eine sehr große Schnittmenge miteinander? Ich meine, zumindest dann, wenn man wirklich von der die Informatik als theoretische Wissenschaft spricht, und nicht von dem, was im Volksmund als Informatik verstanden wird.

                                                          Ja, das ist der Grund, warum ich mir das überhaupt leisten kann. Ich gehe davon aus, mir Mathematik komplett und Physik als Anwendungsfach anrechnen lassen kann - was mir etwa ein Drittel des Bachelorstudiums Informatik erspart (und mich somit dem näher bringt, dass ich den Bachelor Informatik "nebenher" mitnehmen kann, d.h. gleichzeitig mit dem Staatsexamen M/Ph in eineinhalb Jahren - natürlich unter großem Mehraufwand und Stress).

                                                          Ich erinnere mich, dass ein Schulfreund von mir, von dem ich nun auch schon über 20 Jahre nichts mehr gehört habe, damals an der Uni Tübingen Informatik studiert hat. Und der hat sich mal den Jux erlaubt, die Studienpläne für Mathematik und Informatik akribisch zu vergleichen, und er fand nur sehr geringe Unterschiede.

                                                          Naja, so identisch ist es nicht. Wie gesagt, etwa ein Drittel der 180 LP entfallen auf Mathematik/Anwendungsfach (16LP)/ASQ (4LP), der Rest ist schon komplett Informatik-fachspezifisch.

                                                          Einer dieser Unterschiede, die er paradox fand, bestand darin, dass die Mathematik-Studenten ziemlich zu Anfang die Programmiersprache Pascal lernen sollten, während die Informatiker das nicht brauchten.

                                                          Ja, das waren noch Zeiten ;) Im Moment lernen die Bachelor Informatik anfangs vor allem Java (später Haskell, Prolog, Mysql, ...) - und die Bachelor Mathematik auch (zumindest in Ulm wo "Allgemeine Informatik" Pflicht für Mathematiker und Physiker ist), wobei die Mathematiker später ziemlich schnell nur noch Matlab machen.

                                                          Ich persönlich bin ja aber weder Bachelor Physik noch Bachelor Mathematik sondern Staatsexamen (höheres Lehramt) - ich habe also genau die inhaltlichen Überschneidungen mit Informatik bis auf Numerik/Matlab nicht genossen ;)

                                                          Grüße,

                                                          RIDER

                                                          --
                                                          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                                  2. Hallo Camping_RIDER,

                                                    das stösst mir doch sauer auf:

                                                    So eine Aufwandsbetrachtung ist eben wirklich davon abhängig, wie teuer die verschiedenen einzelnen summierten "Elementaroperationen" sind.

                                                    Jain. Bei einer konkreten Performance-Analyse hat du recht, aber bei der Aufwands-Abschätzung eines Algorithmus betrachtet man dessen asymptotisches Verhalten. Da ist der konstante Aufwand k für eine Operation irrelevant und wird deshalb weg gestrichen. Man will halt die Skalierung des Algorithmus betrachten, und nicht wie er sich bei kleinen Datenmengen verhält (hust denn da ist es eh scheiss egal).

                                                    LG,
                                                    CK

                                                    1. Aloha ;)

                                                      das stösst mir doch sauer auf:

                                                      So eine Aufwandsbetrachtung ist eben wirklich davon abhängig, wie teuer die verschiedenen einzelnen summierten "Elementaroperationen" sind.

                                                      Jain. Bei einer konkreten Performance-Analyse hat du recht, aber bei der Aufwands-Abschätzung eines Algorithmus betrachtet man dessen asymptotisches Verhalten. Da ist der konstante Aufwand k für eine Operation irrelevant und wird deshalb weg gestrichen. Man will halt die Skalierung des Algorithmus betrachten, und nicht wie er sich bei kleinen Datenmengen verhält (hust denn da ist es eh scheiss egal).

                                                      Das kommt aber ganz elementar darauf an, ob der Aufwand mit n skaliert oder nicht. Im Fall eines Arrayzugriffs halte ich es schon für möglich, dass der Overhead eben nicht konstant ist, sondern mit n anwächst. Ansonsten hast du natürlich recht, mir ist schon auch klar, dass konstante Faktoren für Aufwandsbetrachtungen uninteressant sind.

                                                      Ursprünglich ging ich davon aus, dass der Overhead mit n skalieren könnte - was du mit deinen Testdaten ja nun widerlegt hast.

                                                      Grüße,

                                                      RIDER

                                                      --
                                                      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                                      1. Hallo Camping_RIDER,

                                                        Das kommt aber ganz elementar darauf an, ob der Aufwand mit n skaliert oder nicht.

                                                        Nein. Der Aufwand wird in dem Fall in n zusammengefasst. Eine genaue Performance-Analyse wird dir zeigen, dass bei der linearen Suche viele Operationen direkt abhängig sind von n. Trotzdem ist die Komplexität O(n) und nicht O(n + n * k).

                                                        Im Fall eines Arrayzugriffs halte ich es schon für möglich, dass der Overhead eben nicht konstant ist, sondern mit n anwächst.

                                                        Nein, er wächst mit der Anzahl der notwendigen Vergleiche an, nicht mit n.

                                                        LG,
                                                        CK

                              2. Moin!

                                Bei 5202 Ortsvorwahlen in .de und dazu - sagen wir mal - 100 anderen (01x) ist der Aufwand, ein Programm zur Umformung der Daten zu erstellen um ein Vielfaches an Personalkosten teurer als das bisschen Suchleistung, die die simple Listensuche generiert.

                                Das ging eigentlich. Das eigentliche Programm ist die while-Schleife, der Rest ist "in Schönheit sterben".

                                Aber, da der Topf gerade auf ist:

                                Kann mir jemand sagen, warum die Speichernutzung so unterschiedlich ist (gemessen vor und nach dem Einlesen des Arrays)? Und warum der Server langsamer ist als der asbach-IBM-Laptop?

                                Jörg Reinholz

                                1. Hi,

                                  Kann mir jemand sagen, warum die Speichernutzung so unterschiedlich ist

                                  nein, weil der jeweils zweite Link zum Server/zur Testseite nicht funktioniert.

                                  Der erste, weil der Name nicht aufgelöst werden kann, der zweite, weil kein richtiges Zertifikat vorhanden ist.

                                  Vermutungen: 32-Bit vs. 64-Bit, PHP-Versionen, ...

                                  cu,
                                  Andreas a/k/a MudGuard

                                  1. Moin!

                                    Kann mir jemand sagen, warum die Speichernutzung so unterschiedlich ist

                                    nein, weil der jeweils zweite Link zum Server/zur Testseite nicht funktioniert.

                                    Der erste, weil der Name nicht aufgelöst werden kann,

                                    Ok. Mein Fehler: https://home.fastix.org/Tests/uptime.php

                                    der zweite, weil kein richtiges Zertifikat vorhanden ist.

                                    Ja. Für meinen Home-Server werde ich auch keins kaufen. Wenn folgendes Zertifikat vorgezeigt wird ist es bis einschließlich 4. März nächsten Jahres O.K.:

                                    Seriennummer: 00:DD:05:01:AB:A8:00:95:72

                                    SHA256: 1B:33:41:3A:10:DE:16:FB:62:AB:60:BD:B8:37:C6:1E:49:C7:1D:D5:7C:C5:44:68:29:9A:6E:3D:E6:BB:68:9A

                                    SHA1: 92:F9:B3:70:63:D6:65:04:F7:77:7C:94:40:8D:DB:70:BC:49:75:25

                                    Jörg Reinholz

                                    1. Tach,

                                      der zweite, weil kein richtiges Zertifikat vorhanden ist.

                                      Ja. Für meinen Home-Server werde ich auch keins kaufen.

                                      https://startssl.com existiert

                                      mfg
                                      Woodfighter

                      2. Hallo Gunnar,

                        liebe Leute, die Normalisierung schreibt man natürlich nicht selber. Das wär ja schlimm. Dazu nutzt man eine Bibliothek, z.B. libphonenumber (Live-Demo) von Google.

                        LG,
                        CK

                  2. Aloha ;)

                    Darf ich den Code denn verwenden?

                    Ich schätze, dass das Sinn der Verlinkung war ;)

                    Und wäre es bei der Ausgabe später möglich dass ich aus 089123456789 wieder ein vernünftiges lesbares Format mache? 089 - 123456789

                    Natürlich, je nachdem mit welcher Sprache du das ausgibst (schätzungsweise PHP?) und in welchem Format du das ausgeben willst, kannst du das selbstverständlich tun. Wahlweise mit regexp-Ersetzungen (preg_replace in php), Substring-Methoden (substr in php) oder regexp-Splitting (preg_split in php)...

                    Grüße,

                    RIDER

                    --
                    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                    1. @@Camping_RIDER

                      Aloha ;)

                      Darf ich den Code denn verwenden?

                      Ich schätze, dass das Sinn der Verlinkung war ;)

                      Und wäre es bei der Ausgabe später möglich dass ich aus 089123456789 wieder ein vernünftiges lesbares Format mache? 089 - 123456789

                      Natürlich, je nachdem mit welcher Sprache du das ausgibst (schätzungsweise PHP?) und in welchem Format du das ausgeben willst, kannst du das selbstverständlich tun.

                      So selbstverständlich ist das nicht.

                      Für Länder mit festgelegter Länge von Vorwahlen ist es ein Leichtes, bspw. aus +14155551701 menschenlesbares (415) 555-1701 zu machen.

                      Aber wo ist bei der deutschen Telefonnummer +498932168 (oder 08932168) die Grenze zwischen Ortsnetzkennzahl (Vorwahl) und Teilnehmerrufnummer? Da die Ortsnetzkennzahlen unterschiedlich lang sind, bräuchte man dazu zusätzliches Wissen, nämlich eine Liste sämtlicher deutscher Ortsnetzkennzahlen.

                      LLAP 🖖

                      --
                      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                      1. Aloha ;)

                        Darf ich den Code denn verwenden?

                        Ich schätze, dass das Sinn der Verlinkung war ;)

                        Und wäre es bei der Ausgabe später möglich dass ich aus 089123456789 wieder ein vernünftiges lesbares Format mache? 089 - 123456789

                        Natürlich, je nachdem mit welcher Sprache du das ausgibst (schätzungsweise PHP?) und in welchem Format du das ausgeben willst, kannst du das selbstverständlich tun.

                        So selbstverständlich ist das nicht.

                        Für Länder mit festgelegter Länge von Vorwahlen, ist es ein Leichtes, aus +14155551701 menschenlesbares (415) 555-1701 zu machen.

                        Aber wo ist bei der deutschen Telefonnummer +498932168 (oder 08932168) die Grenze zwischen Ortsnetzkennzahl (Vorwahl) und Teilnehmerrufnummer? Da die Ortsnetzkennzahlen unterschiedlich lang sind, bräuchte man dazu zusätzliches Wissen, nämlich eine Liste sämtlicher deutscher Ortsnetzkennzahlen.

                        Wer hat behauptet, dass die Trennung nach Ortsnetzkennzahl und Teilnehmerrufnummer stattfinden soll?

                        Ich nicht, und der TO meines Wissens nach auch nicht. Der TO wollte eine bestimmte Formatierung, die einheitliches Aussehen ermöglicht. Niemand hat gesagt, dass die Formatierung in jedem Fall Sinn ergeben muss, dieser Gedanke hat sich in der Diskussion selbständig entwickelt.

                        Meine Aussage war nur, dass es natürlich funktioniert, die Ausgabe zu formatieren, wenn das

                        in welchem Format du das ausgeben willst

                        klar ist. Und ich sehe da schon Möglichkeiten.

                        Grüße,

                        RIDER

                        --
                        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                        1. Hi,

                          Wer hat behauptet, dass die Trennung nach Ortsnetzkennzahl und Teilnehmerrufnummer stattfinden soll?

                          Jule: "Alle Nummern sollten schön mit einer 0 beginnen, nach der Vorwahl ein Leerzeichen, dann ein - dann wieder ein Leerzeichen und dann die Hauptnummer. So habe ich eine schöne Ordnung."

                          cu,
                          Andreas a/k/a MudGuard

                        2. @@Camping_RIDER

                          Wer hat behauptet, dass die Trennung nach Ortsnetzkennzahl und Teilnehmerrufnummer stattfinden soll?

                          Ich nicht, und der TO meines Wissens nach auch nicht.

                          MudGuard hat dein Wissen schon aufgefrischt.

                          Außerdem braucht es gar keine derartige Behauptung; der gesunde Menschenverstand sollte genügen.

                          Niemand hat gesagt, dass die Formatierung in jedem Fall Sinn ergeben muss

                          Die Formatierung einer Münchner Nummer als +49-893-2168 ergibt keinen Sinn.

                          Meine Aussage war nur, dass es natürlich funktioniert, die Ausgabe zu formatieren

                          Eine unsinnige Formatierung ist nichts, was „funktioniert“.

                          Und ich sehe da schon Möglichkeiten.

                          Hab ich gesehen und für Unsinn erachtet.

                          LLAP 🖖

                          --
                          Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                          1. Hallo,

                            andere Idee, der User muss ein - eingeben. Ist dieses zuzumuten? Dann könnte hätte ich wenigstens die Vorwahl und die Hauptnummer getrennt. Wenn ein User (089) - xxx oder +4989 - xxx eingibt, könnte ich mit PHP die () und + entfernen lassen?

                            1. @@Jule

                              andere Idee, der User muss ein - eingeben. Ist dieses zuzumuten?

                              Nein. Jede Idee, die mit „der Nutzer MUSS …“ anfängt, ist nicht zuzumuten.

                              LLAP 🖖

                              --
                              Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                              1. Hallo,

                                Nein. Jede Idee, die mit „der Nutzer MUSS …“ anfängt, ist nicht zuzumuten.

                                dann ist aber DIESES Forum auch NICHT Benutzerfreundlich, weil ich mir erstmal überlegen muss wie hier etwas zu benutzten ist und ich mir Seitenweise Text durchlesen muss.

                                Hast du mir vorhin nicht erst etwas über Seitenlange Anleitungen erzählen wollen? :)

                                Dann hätte ich noch eine andere Idee, ich trenne die Vorwahl und die Hauptnummer in zwei Felder wie man es z.B. auch sehr oft bei einer PLZ und Ort bzw. Straße und Hausnummer hat.

                                1. @@Jule

                                  dann ist aber DIESES Forum auch NICHT Benutzerfreundlich, weil ich mir erstmal überlegen muss wie hier etwas zu benutzten ist und ich mir Seitenweise Text durchlesen muss.

                                  Das ist leider so, sollte es aber nicht. Ein running gag der eher unlustigen Art.

                                  Dann hätte ich noch eine andere Idee, ich trenne die Vorwahl und die Hauptnummer in zwei Felder wie man es z.B. auch sehr oft bei einer PLZ und Ort bzw. Straße und Hausnummer hat.

                                  Nei-en! Eine Telefonnnummer ist ein Ding; das sollte man nicht auf mehrere Eingabefelder aufteilen (ebensowenig wie Tag/Monat/Jahr, was ein Datum ist). Dagegen spricht:

                                  • Nutzer müssen von einem Eingabefeld zm nächsten springen. Viele wissen vermutlich nicht, dass das auch mit der Tab-Taste ginge, wechseln also von Tastatur zu Maus und zurück zur Tastatur.
                                  • Nutzer werden eine Telefonnummer per copy und paste einfügen. Dann liegt die Telefonnumer als ein String vor.

                                  Ich habe eine Idee für dich (und alle anderen Entwickler): Ein Entwickler sollte niemals seine Probleme auf die Nutzer abwälzen.

                                  LLAP 🖖

                                  --
                                  Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                                  1. Hallo,

                                    Ich habe eine Idee für dich (und alle anderen Entwickler): Ein Entwickler sollte niemals seine Probleme auf die Nutzer abwälzen.

                                    es gibt aber auch Grenzen wo ein Entwickler einfach keine andere Lösung hat also dem User etwas vorzuschreiben wie er die Daten gerne hätte?

                                    1. @@Jule

                                      Ich habe eine Idee für dich (und alle anderen Entwickler): Ein Entwickler sollte niemals seine Probleme auf die Nutzer abwälzen.

                                      es gibt aber auch Grenzen wo ein Entwickler einfach keine andere Lösung hat also dem User etwas vorzuschreiben wie er die Daten gerne hätte?

                                      Dann sollte der Entwickler seine Grenzen erweitern (es zumindest versuchen), nicht die Grenzen der Nutzer einengen.

                                      LLAP 🖖

                                      --
                                      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                          2. Aloha ;)

                            Meine Aussage war nur, dass es natürlich funktioniert, die Ausgabe zu formatieren

                            Eine unsinnige Formatierung ist nichts, was „funktioniert“.

                            Und ich sehe da schon Möglichkeiten.

                            Hab ich gesehen und für Unsinn erachtet.

                            Stattgegeben, auch @MudGuard.

                            Grüße,

                            RIDER

                            --
                            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                        3. Hallo,

                          Ich nicht, und der TO meines Wissens nach auch nicht. Der TO wollte eine bestimmte Formatierung, die einheitliches Aussehen ermöglicht. Niemand hat gesagt, dass die Formatierung in jedem Fall Sinn ergeben muss, dieser Gedanke hat sich in der Diskussion selbständig entwickelt.

                          natürlich muss es ein Sinn geben. Wenn ich aus 089xxxxxx plötzlich 089x - xxxx mache GANZ klasse, dann kann ich den scheiß auch gerade lassen.

                3. @@Jörg Reinholz

                  Nein! Das kann in den allermeisten Fällen die Software für Dich machen. Du solltest die gewiss nicht wahlfrei verlinkten Beiträge lesen.

                  Eine Anmerkung dazu:

                  Ich würde nicht zum nationalen Format 08932168 bzw. 0014155551701 normalisieren, sondern zum internationalen, also +498932168 bzw. +14155551701.

                  LLAP 🖖

                  --
                  Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
              3. Hi,

                was bringt mir das aber wenn ich folgende Nummern in meiner Datenbank habe:

                089 - xxx
                089-xxx
                089xxx
                (089) - xxx
                (089)-xxx
                (089)xxx
                +49089
                +4989
                +49 89
                +49 089

                das will hier niemand empfehlen! Vor dem Speichern solltest du die Eingaben auf jeden Fall normalisieren, also in ein einheitliches Format bringen. Die Eingabe an sich sollte aber möglichst flexibel und soweit möglich ohne Einschränkung sein.

                JA es kommt mir sehr auf das Design drauf an, bei mir MUSS alles schön untereinander stehen.

                Dann formatiere dein internes, normalisiertes Format bei der Ausgabe so, wie du es haben willst. Das ist das übliche Vorgehen.

                So long,
                 Martin

                1. Hallo,

                  das will hier niemand empfehlen! Vor dem Speichern solltest du die Eingaben auf jeden Fall normalisieren, also in ein einheitliches Format bringen. Die Eingabe an sich sollte aber möglichst flexibel und soweit möglich ohne Einschränkung sein.

                  OK, dafür könnte ich die Funktion von Jörg nehmen: http://forum.selfhtml.org/self/2015/aug/15/input-type-gleich-tel/1648013#m1648013

                  Dann formatiere dein internes, normalisiertes Format bei der Ausgabe so, wie du es haben willst. Das ist das übliche Vorgehen.

                  Jetzt bleibt noch die Frage, kann PHP aus dieser Nummer 089123456789 bei der Ausgabe 089 - 123456789 machen?

                  1. Mahlzeit,

                    Jetzt bleibt noch die Frage, kann PHP aus dieser Nummer 089123456789 bei der Ausgabe 089 - 123456789 machen?

                    nicht "einfach so", weil das deutsche Vorwahlen-Schema chaotisch ist und keinem klaren System folgt: Die Vorwahl kann AFAIK von zwei bis vier Ziffern lang sein (die führende Null nicht mitgerechnet). Du müsstest also gegen eine Tabelle aller Vorwahlnummern prüfen, wie Jörg schon skizziert hat (der Aufwand, diese Tabelle aktuell zu halten, dürfte gering sein, so oft werden Vorwahlbezirke ja nicht geändert, neu geschaffen oder gelöscht).

                    Ich würde es vermutlich anders machen: Ich würde etwas mehr Aufwand mit der Normalisierung bei der Eingabe treiben und zumindest die Zifferngruppierung so übernehmen, wie sie eingegeben wurde, Also beispielsweise (089) 3728492 zu +49-89-3728492 normalisieren.
                    Dann kann ich bei der Ausgabe relativ einfach "+49" durch eine Null ersetzen und habe eine nationale Telefonnummer in üblicher Schreibweise, während ich andere Ländervorwahlen unverändert ausgeben würde, also etwa +31-514-564628.

                    So long,
                     Martin

                    1. Aloha ;)

                      Ich würde es vermutlich anders machen: Ich würde etwas mehr Aufwand mit der Normalisierung bei der Eingabe treiben und zumindest die Zifferngruppierung so übernehmen, wie sie eingegeben wurde, Also beispielsweise (089) 3728492 zu +49-89-3728492 normalisieren.
                      Dann kann ich bei der Ausgabe relativ einfach "+49" durch eine Null ersetzen und habe eine nationale Telefonnummer in üblicher Schreibweise, während ich andere Ländervorwahlen unverändert ausgeben würde, also etwa +31-514-564628.

                      Das wiederum löst aber das Problem nicht, da du bei einer Eingabe ganz ohne Leerzeichen wieder keine Ahnung hättest, wo du das Leerzeichen bei der Ausgabe setzen sollst (und der TO will offenbar, dass die Trennung überall erfolgt).

                      Meine Empfehlung wäre in dem Fall (angesichts dessen, dass es mehr um die einheitliche Darstellung auf dem Datenblatt als die tatsächliche Trennung zwischen Vorwahl und... äh... Hauptwahl geht), die Trennung einfach nach festen Abständen vorzunehmen, die die gängigsten Vorwahlen zumindest in irgendeiner Form berücksichtigen. Z.B. so:

                      +49-800-xx-xxxxx
                      +49-734-87-xxxxx
                      +31-514-56-4628

                      oder so ähnlich...

                      Grüße,

                      RIDER

                      --
                      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                    2. @@Der Martin

                      Die Vorwahl kann AFAIK von zwei bis vier Ziffern lang sein (die führende Null nicht mitgerechnet).

                      Bis fünf Ziffern (im Ortsvorwahlbereich 03).

                      LLAP 🖖

                      --
                      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
  2. @@Jule

    Ich möchte dass meine User nur eine Telefonnummer eintragen können. Was mache ich falsch?

    <input type="tel" name="tel_check" id="tel_check" value="" required>
    

    Du gar nichts. Der Browser macht’s falsch. Entweder er ist alt und kann kein HTML5 oder er ist Safari und kann kein HTML5.

    Bleibt nur, die clientseitige Formularvalidierung mit JavaScript zu machen oder in unfähigen Browsern drauf zu verzichten.

    LLAP 🖖

    --
    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
    1. Hallo,

      Du gar nichts. Der Browser macht’s falsch. Entweder er ist alt und kann kein HTML5 oder er ist Safari und kann kein HTML5.

      ich habe hier derzeit ein Google Chrome unter Windows 10. Wenn ich heute Nachmittag in der Schule bin kann ich es gerne mal unter einem MAC testen.

    2. @@Gunnar Bittersmann

      Oops, natürlich haben MrMurphy und CK recht; in <input type="tel"> kann der Nutzer eintragen was er will (außer Zeilenumbrüche). [HTML5]

      Note: Unlike the URL and E-mail types, the Telephone type does not enforce a particular syntax. This is intentional; in practice, telephone number fields tend to be free-form fields, because there are a wide variety of valid phone numbers. Systems that need to enforce a particular format are encouraged to use the pattern attribute or the setCustomValidity() method to hook into the client-side validation mechanism.”

      Meine Antwort bezog sich schon auf den nächsten Schritt: Selbst wenn du pattern angeben würdest (wie MrMurphy und CK sagten, darf das nicht zu eng gefasst sein), würde Safari das Formular auch abschicken, wenn es nicht valide ist. Oder ist der Bug inzwischen gefixt?

      Im übrigen ist auch HALLO eine gültige Telefonnummer: 42556.

      LLAP 🖖

      --
      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
      1. Hallo,

        Im übrigen ist auch HALLO eine gültige Telefonnummer: 42556.

        jetzt mal ganz ehrlich, hast du jemals von einem Menschen gehört und oder gelesen "Ruf mich bitte unter Hallo" an? Würdest du dir jetzt die Mühe machen erstmal dein Handy raus zu holen um zu schauen welche Nummer sich dahinter verbirgt?

        1. Hi,

          Im übrigen ist auch HALLO eine gültige Telefonnummer: 42556.

          jetzt mal ganz ehrlich, hast du jemals von einem Menschen gehört und oder gelesen "Ruf mich bitte unter Hallo" an?

          von Menschen (sprich: Privatpersonen) noch nicht; von Firmen dagegen schon öfters. Zugegeben, hier in DE ist das noch ungewöhnlich, aber die Amerikaner benutzen solche Vanity-Nummern sehr gerne, weil sie einprägsam sind.
          So wirbt beispielsweise die Lufthansa in USA mit ihrer kostenlosen Hotline 0800-FLY-LUFT. Kann man sich doch leichter merken als 0800-3595838, oder?

          Würdest du dir jetzt die Mühe machen erstmal dein Handy raus zu holen um zu schauen welche Nummer sich dahinter verbirgt?

          Nö, wozu? Ich würde mir die "Nummer" so einprägen, wie sie mir mitgeteilt wurde, als HALLO. Welche Ziffern dazu gehören, sehe ich irgendwann, wenn ich die Nummer wähle. Muss ich aber eigentlich gar nicht wissen.

          So long,
           Martin

          1. @@Der Martin

            von Firmen dagegen schon öfters. Zugegeben, hier in DE ist das noch ungewöhnlich

            Und wenn, dann werden sie mitunter auch unsinnig verwendet:

            Unter 0800-TELEKOM erreicht man nicht etwa den Service, sondern die Nummer wurde mal für irgendeine Aktion verwendet. Jetzt läuft eine automatische Ansage, welche Nummer (die amn sich nicht so leicht merken kann) man stattdessen zu wählen hat. EOT.

            Sechs, Telekom, setzen.

            LLAP 🖖

            --
            Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
        2. Moin!

          jetzt mal ganz ehrlich, hast du jemals von einem Menschen gehört und oder gelesen "Ruf mich bitte unter Hallo" an?

          Oh ja. Das machen einige Firmen so. Allerdings sind diese Vanity-Nummern in Deutschland nicht so gebräuchlich wie anderswo.

          Auf die unterschiedlichen Möglichkeiten, bei denen keine "0" am Anfang steht, wurdest Du hingewiesen.

          Jörg Reinholz

  3. Hallo Jule,

    Jetzt trage ich Hallo ein und ich komme weiter, falsch meiner Meinung nach.

    Ich möchte dass meine User nur eine Telefonnummer eintragen können. Was mache ich falsch?

    <input type="tel" name="tel_check" id="tel_check" value="" required>
    

    Es gibt keine Validierung zum Tel-Input-Typ. Den musst du selber implementieren, etwa über das pattern-Attribut.

    Vergiss aber nicht, dass bei serverseitiger Weiterverarbeitung eine Prüfung notwendig ist, denn die Client-seitigen Prüfungen können leicht umgangen werden und sind eher aus Usability-Sicht zu betrachten.

    LG,
    CK

      1. Tach,

        Telefonnummern-Formatierer: bitte mal testen

        das Script versucht Durchwahlen zu erraten, bei Berliner achtstelligen Telefonnummern reagiert es dabei schonmal falsch. Meine Büronummer hat 8 Stellen und zwei Stellen gehören zur Durchwahl und meine ehemalige Privatnummer hatte 8 Stellen ohne Durchwahl; in beiden Fälllen wird die letzte Stelle mit einem - abgetrennt.

        mfg
        Woodfighter

        1. Moin!

          das Script versucht Durchwahlen zu erraten,

          Ja. Das habe ich aus den von Dir genannten Gründen 1 Sekunde später abgestellt.

          Jörg Reinholz

        2. Hallo

          Telefonnummern-Formatierer: bitte mal testen

          das Script versucht Durchwahlen zu erraten, bei Berliner achtstelligen Telefonnummern reagiert es dabei schonmal falsch. Meine Büronummer hat 8 Stellen und zwei Stellen gehören zur Durchwahl und meine ehemalige Privatnummer hatte 8 Stellen ohne Durchwahl; in beiden Fälllen wird die letzte Stelle mit einem - abgetrennt.

          Um die Verwirrung komplett zu machen:

          • Freundin: 7-stellige Durchwahl
          • Iche (privat): 8-stellige Durchwahl
          • Iche (Arbeit): 9-stellige Durchwahl

          Alles in Berlin

          Tschö, Auge

          --
          Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
          Terry Pratchett, „Gevatter Tod“
          1. Tach!

            Um die Verwirrung komplett zu machen:

            • Freundin: 7-stellige Durchwahl
            • Iche (privat): 8-stellige Durchwahl
            • Iche (Arbeit): 9-stellige Durchwahl

            Die Durchwahl ist die Rufnummer einer Nebenstellenanlage, also in Firmen oder Behörden die Nummern der Mitarbeiter. Privat eine 7-stellige Durchwahl zu haben ist so gut wie ausgeschlossen. So einen großen Rufnummernblock bekommst du nicht, wenn du nicht jede Menge Leitungen bestellst. In Firmen kann es gelegentlich überlange Durchwahlen geben, die aber weniger für Rufnummern von Mitarbeitern genutzt werden. Die Länge kommt zustande, wenn man beispielsweise jedem Mitarbeiter eine Fax-Mailbox zur Verfügung stellen möchte und ein nicht gerade kurzes Präfix vor die Durchwahl stellt. So dass beispielsweise die Durchwahl für den Mitarbeiter 1234 lautet und seine persönliche Fax-Rufnummer die 987 1234 ist. (Solche überlangen Durchwahlen sind eigentlich nicht gestattet, funktionieren aber oftmals technisch problemlos. Wenn man einen Rufnummernblock zugewiesen bekommt, hat dieser eine bestimmte Anzahl Ziffern und erstreckt sich über einen definierten Bereich.)

            Das Schema und die Begrifflichkeiten lauten:
            Landesvorwahl - Ortsvorwahl - Teilnehmerrufnummer
            oder bei privaten Telefonanlagen:
            Landesvorwahl - Ortsvorwahl - Einwahl - Durchwahl.

            dedlfix.

            1. Hallo

              Um die Verwirrung komplett zu machen:

              • Freundin: 7-stellige Durchwahl
              • Iche (privat): 8-stellige Durchwahl
              • Iche (Arbeit): 9-stellige Durchwahl

              Das Schema und die Begrifflichkeiten lauten:
              Landesvorwahl - Ortsvorwahl - Teilnehmerrufnummer
              oder bei privaten Telefonanlagen:
              Landesvorwahl - Ortsvorwahl - Einwahl - Durchwahl.

              Ich korrigiere (um die Verwirrung komplett zu machen):

              • Freundin: 7-stellige Teilnehmerrufnummer
              • Iche (privat): 8-stellige Teilnehmerrufnummer
              • Iche (Arbeit): 6-stellige Teilnehmerrufnummer, 3-stellige Durchwahl

              Wobei es aus Sicht des Anrufers egal ist, welcher Teil Rufnummer und welcher Durchwahl ist. Wenn ich jemandem meine Arbeitsnummer mitteile, unterscheide ich und die bedachte Person auch nicht nach Rufnummer und Durchwahl. Die hier benutzte Struktur sollte deshalb ebenfalls nicht zwischen Rufnummer und Durchwahl unterscheiden. Schließlich will Jnnbo Kunden anhand von Telefonnummern wiederfinden, die ihm z.B. fernmündlich durchgegeben werden.

              Tschö, Auge

              --
              Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
              Terry Pratchett, „Gevatter Tod“
              1. Hi,

                Wobei es aus Sicht des Anrufers egal ist, welcher Teil Rufnummer und welcher Durchwahl ist.

                Naja. Üblicherweise ist die Durchwahl 0 die Telefon-Zentrale der Firma. Wenn man also den Mitarbeiter nicht direkt erreicht, ist es durchaus hilfreich, zu wissen, wie viele Ziffern man durch die 0 ersetzen muß ...

                cu,
                Andreas a/k/a MudGuard

                1. Hallo

                  Wobei es aus Sicht des Anrufers egal ist, welcher Teil Rufnummer und welcher Durchwahl ist.

                  Naja. Üblicherweise ist die Durchwahl 0 die Telefon-Zentrale der Firma. Wenn man also den Mitarbeiter nicht direkt erreicht, ist es durchaus hilfreich, zu wissen, wie viele Ziffern man durch die 0 ersetzen muß ...

                  Natürlich, füe diesen Fall muss ich die Nummer der Zentrale haben oder zumindest erkennen können. Sie explizit zu haben, ist an der Stelle aber auch besser. Üblicherweise will ich aber Mitarbeiter Ix Üpsilon Ungelöst in Abteilung XII erreichen und benutze, wenn ich sie denn habe, seine Rufnummer inklusive allem Schnickschnack, ohne Ansehen der technischen Bezeichnungen der Bestandteile, direkt. Und so – ohne Ansehen der technischen Bezeichnungen der Bestandteile – würde ich sie mir, egal, ob auf einem Zettel oder im Rechner, auch notiert haben.

                  Tschö, Auge

                  --
                  Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
                  Terry Pratchett, „Gevatter Tod“
                2. Tach!

                  Naja. Üblicherweise ist die Durchwahl 0 die Telefon-Zentrale der Firma. Wenn man also den Mitarbeiter nicht direkt erreicht, ist es durchaus hilfreich, zu wissen, wie viele Ziffern man durch die 0 ersetzen muß ...

                  Darauf kann man sich schon lange nicht mehr verlassen. Die Nebenstellen-Rufnummernblöcke gehen nicht mehr komplett von 0… bis 9…. Gemäß den Zuteilungsregeln sind da auch Blöcke mit 30, 70, 300, 500, 3000, 4000 und 5000 Rufnummern drin. Wenn du stur mit 0 ersetzt, landest du auch mal in einer anderen Firma. Da kannst du nur hoffen, dass die Vermittlung nicht an irgendeinen keine Ahnung habenden Dienstleister in der Pampa outgesourct wurde, sondern die örtlichen Gegebenheiten kennt und dir die richtige Nummer der anderen Firma geben kann.

                  dedlfix.

      2. Hi,

        Telefonnummern-Formatierer: bitte mal testen

        0222412345 wird zu +49 2224 12345 (Bezirk: Bad) Da fehlt wohl der Rest vom Ortsnamen.

        Bei 015er Mobilnummern trennst Du ungewöhnlich. Du machst die Trennung von 015123456789 nach der 4. Ziffer: 0151 23456789.

        015er Nummern setzen sich so zusammen:
        Präfix "0"
        Bereich "15"
        Blockbereich bis 19.9.2013 2 Ziffern, danach 3 Ziffern
        Endeinrichtugn bis 19.9.2013 7 Ziffern, danach 6 Ziffern

        (wobei Blockbereich und Endeinrichtung die Teilnehmer-Rufnummer sind)

        Korrekt wäre also die Trennung 015 123456789, akzeptabel auch noch 0151 23456789 oder 01512 3456789 - wobei Du dazu wissen müßtest, wann die Nummer vergeben wurde.

        Bei 016 und 017 ist die Blockkennung immer 1 Ziffer, da ist es einfacher, wenn man die Trennung nach dem Block machen will.

        0190123456 wird zu +49 190 123456 (Bezirk: frühere KOSTENPFLICHTIGE Servicenummern, Interneteinwahl) - 0190 ist aber keine Interneteinwahl, siehe nächsten Absatz.

        0195123456 formatierst Du zu +49 19 um - bei 019 wird aber nur 2, 3 und 4 als nächste Ziffer erlaubt, das sollte also eine Fehlermeldung ergeben, nicht einfach nur abhacken. 0191 ist nur noch historisch vorhanden.

        Quelle: Numerierungskonzept Bundesnetzagentur PDF

        cu,
        Andreas a/k/a MudGuard

        1. Moin!

          0222412345 wird zu +49 2224 12345 (Bezirk: Bad) Da fehlt wohl der Rest vom Ortsnamen.

          Repariert. Scheint, das PDF gibt es in zwei Versionen... habe die Daten aus dem vor mir selbst genannten PDF neu erzeugt...

          Bei 015er Mobilnummern trennst Du ungewöhnlich. Du machst die Trennung von 015123456789 nach der 4. Ziffer: 0151 23456789.

          Du schreibst selbst, dieses sei akzeptabel. Sonst müsste ich wissen, wann welche Nummer vergeben wurde. Es geht hier ja nur um eine Formatierung, bei der der Leser anhand der Vorwahl sehen soll, was das wohl für eine Nummer ist...

          Bei 016 und 017 ist die Blockkennung immer 1 Ziffer, da ist es einfacher, wenn man die Trennung nach dem Block machen will.

          Dito. Die Leser sind die Angabe mit 0160, 0161 gewöhnt.

          0190

          repariert.

          0195123456 formatierst Du zu +49 19 um - bei 019 wird aber nur 2, 3 und 4 als nächste Ziffer erlaubt, das sollte also eine Fehlermeldung ergeben, nicht einfach nur abhacken. 0191 ist nur noch historisch vorhanden.

          repariert.

          Jörg Reinholz

          1. Hi,

            Bei 015er Mobilnummern trennst Du ungewöhnlich. Du machst die Trennung von 015123456789 nach der 4. Ziffer: 0151 23456789.

            Du schreibst selbst, dieses sei akzeptabel.

            Das schrieb ich - fälschlicherweise. Korrektur siehe Korrekturposting

            Die Beispiele waren falsch - da in den Beispielen, so wie bei Deinem Formatierer, die Trennung innerhalb des Blockbereichs erfolgt. Es war jeweils in meinen Teilen eine Ziffer zu wenig im Vorwahl- und eine zuviel im Teilnehmer-Teil.

            cu,
            Andreas a/k/a MudGuard

            1. Moin!

              Das schrieb ich - fälschlicherweise. Korrektur siehe Korrekturposting

              Ok. Korrigiert.

              Mann - Oh - Mann.

              Wenn ich sehe, wie das in (auf dem Server in 14 - 17 Millisekunden, auf dem Test"server" (IBM X60S) in 7 Millisekunden) abgeht, obwohl zunächst ein doch recht großer Array gefüllt wird, dann bin ich hell begeistert.

              Jörg Reinholz

              1. Hallo

                Ok. Korrigiert.

                Soll der Link auf x60.home zeigen?

                Tschö, Auge

                --
                Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
                Terry Pratchett, „Gevatter Tod“
                1. Moin!

                  Hallo

                  Ok. Korrigiert.

                  Soll der Link auf x60.home zeigen?

                  Nein. Aber ich war mit der Korrektur schneller als Du mit dem Fragen :)

                  Ok. Korrigiert.

                  BTW:

                  Gibt es zwischen PHP 5.3 und 5.6 einen grundlegenden Unterschied, was die Verwendung des Arbeitsspeichers für named Arrays betrifft? Zu Hause ist nicht nur der eigentlich eher lahme Rechner (2x1.86Ghz - Intel von vor 6 Jahren) schneller, da braucht PHP (Skripte, Includes und Daten sind identisch!) auch nur die Hälfte des Speichers für die Daten!

                  Wie auch immer. Dafür, dass ich nur mal rasch Gunnars geniale Idee umsetzen wollte, ist das doch ein nettes Ergebnis.

                  Jörg Reinholz

                  1. Aloha ;)

                    Wie auch immer. Dafür, dass ich nur mal rasch Gunnars geniale Idee umsetzen wollte, ist das doch ein nettes Ergebnis.

                    Was mich rein akademisch interessieren würde: Wie viel Unterschied das ausmacht, ob man die Datenstruktur wählt wie von Gunnar vorgeschlagen oder ob man tatsächlich nur ein lineares Array nimmt - immerhin liegt hier ein numerisch sortiertes Array vor, d.h. man kann mittels Binärer Suche (Aufwand log n) die Durchsuchung vornehmen und landet dann meiner Rechnung nach bei einem Aufwand (etwa 1300 nicht-vierstellige Vorwahlen) von ~10 Vergleichen pro Suchvorgang, bzw. dann lediglich 30 Vergleichen für die Gesamtfeststellung, wie viele Ziffern (2,3,4,5) die Vorwahl hat. Wäre interessant zu wissen, ob das einen spürbaren Unterschied macht (wahrscheinlich ja, aber wahrscheinlich nicht sehr groß - immerhin bewegen wir uns aufwandtechnisch nahezu in der selben Größenordnung).

                    Grüße,

                    RIDER

                    --
                    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        2. Hi,

          Bei 015er Mobilnummern trennst Du ungewöhnlich. Du machst die Trennung von 015123456789 nach der 4. Ziffer: 0151 23456789.

          015er Nummern setzen sich so zusammen:
          Präfix "0"
          Bereich "15"
          Blockbereich bis 19.9.2013 2 Ziffern, danach 3 Ziffern
          Endeinrichtugn bis 19.9.2013 7 Ziffern, danach 6 Ziffern

          (wobei Blockbereich und Endeinrichtung die Teilnehmer-Rufnummer sind)

          Korrekt wäre also die Trennung 015 123456789, akzeptabel auch noch 0151 23456789 oder 01512 3456789 - wobei Du dazu wissen müßtest, wann die Nummer vergeben wurde.

          Korrektur:

          akzeptabel auch noch 01512 3456789 oder 015123 456789 - wobei Du dazu wissen müßtest, wann die Nummer vergeben wurde.

          Akzeptabel wäre, wenn die Trennung NACH dem Blockbereich wäre. Bei 0151 23456789 ist die Trennung aber IM Blockbereich.

          cu,
          Andreas a/k/a MudGuard