PHP-Validierung: 1. Zeile der Adresse und der Postleitzahl
Ich möchte einige Validierung in PHP (Postanschrift).
Beispielsweise die Validierung der ersten Zeile der Adresse und Postleitzahl:
123 Some Road
und
W3 1TJ
Diese beiden Felder haben beide eine Nummer, Buchstabe und ein Leerzeichen ein.
Habe ich versucht, ein paar Muster für reguläre Ausdrücke ist das aber nicht akzeptieren, den Raum und das ist, wo ich Hilfe brauche.
Hier ist der code, den ich bisher verwendet:
$address1CheckPattern = '/^[a-z0-9-]+$/';
$adress1HasError = !preg_match($address1CheckPattern, $address1);
- könntest du posten, was du versucht hast und welche Fehler du hast ?
- Warum wollen Sie das überprüfen einer Adresse mit einer regex? es ist völlig nutzlos...
- Warum nutzen Sie nicht die Google Maps API Geocoding developers.google.com/maps/documentation/geocoding, wenn ein Ergebnis zurückgegeben wird, dann ist es eine gültige Adresse.
- Sagen Sie, Sie wollen, dass jedes Feld mit mindestens einem Leerzeichen, ein Buchstabe und eine Zahl? All diese zip-codes aus einem bestimmten Land? Ich bin ein wenig unklar über die Validierung Regeln, die Sie wollen.
- Sie habe, teilte Sie Ihren code und Sie erklärt haben, was Sie fehlen. Die Frage ist, warum Sie können nicht hinzufügen Raum, um Ihre Muster? Nur wenn wir wissen, warum Sie scheitern können diese Frage beantwortet werden (was ich meine ist, nur zu versuchen, um das problem zu erklären, nachdem Sie den code in Ihren eigenen Worten, wie die, was Ihre geistige Konzept ist, um ein Leerzeichen einzufügen, um das Muster und warum Sie nicht wissen/sehen, wo Sie es hinzufügen). Vor allem, wie Sie sind auf der Suche nach "offiziellen Quellen" nun mit deiner bounty.
- Ich Stimme mit @NickyDeMaeyer, nicht mit Regex. Ich habe mich für die Geokodierung für meine überprüfung, viele der APIs gibt für, die.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der in einem Allgemeinen Fall. Aber nicht alle Adresse line 1 ist eine Zahl, Manche nur einen Namen haben. eg Haus Name, Straße
wenn Ihr gerne mit dem regex und Sie wollen einfach nur, es zu akzeptieren, ein Raum. Fügen Sie ein Leerzeichen, um die regex
Aber seine immer noch nicht ein guter Weg, um match-Adressen. Die Verwendung einer öffentlichen API, die die realen Daten aus der royal mail wird das beste sein. Die Google API (kostenlos, aber rate beschränkt) oder einen bezahlten Dienst wie Postleitzahl, überall wird viel besser für Sie
'
auch eine rechtliche char in der ersten Zeilenicht genau die Beantwortung der Frage, aber ich hatte einmal die Aufgabe der Validierung von Postleitzahlen
Ich Baue die folgenden regexes für diesen Zweck; hoffe, das hilft.
wie einige vor mir gesagt, es gibt keine Möglichkeit zu überprüfen JEDE Adresse in einem bestimmten Land, geschweige denn auf dem Planeten! es wird zu einem Allgemeinen Textfeld, vielleicht überprüfen Sie einfach für die Zeichen, die Sie nicht wollen:"?<>=;@$%^*!" und bereinigen der Eingabe nicht um SQL injiziert.
in meiner Anwendung, die Postleitzahl wurde getestet, je nach Land, in Feld, aber wenn Sie wissen, dass Sie den test nur ein paar ausgewählte können Sie legte einige zusammen
zB:US/UK =
/^([\d]{5}(-[\d]{4})?)|([A-Z]?[A-Z][0-9][A-Z0-9]?\s[0-9][A-Z]{2})/
\s
das Zeichen für Speicherplatz?Was ist mit speziellen chars in die adressline?
In Deutschland gibt es Häufig ein "-" in der streetname oder das Deutsche Wort für "Straße" ist abroivated mit "str." - also ein Punkt in der Linie. Wenn ich zu bewältigen hatte Deutsche Adressen auf der Arbeit ich zu tun hatte mit Zeilen wie "NW 10 Straße 39b", "Elsa- - Brandström-Str 128 Haus 3", etc.
Das gleiche für die post-codes an. Ich Deutschland haben wir 5 digist - einfach, aber andere Länder haben auch alphanumerische Zeichen, wie dein Beispiel "W3 1TJ', etc. in seinem inneren.
Also ich würde behaupten, es gibt keine Allgemeinen Validierung für die Adressleitungen.
Können Sie auch einen Raum in einem akzeptablen Zeichen, indem er einfach ein Leerzeichen in den eckigen Klammern. Also würde es so Aussehen:
Ist, dass das, was du suchst?
Bemerken habe ich auch noch "A-Z" - Reihe zu den regex: du willst wohl erlauben-Adressen Großbuchstaben enthalten, es sei denn, Sie sind bereits eine Verringerung der Adresse um alles in Kleinbuchstaben oder so etwas.
Ich würde auch empfehlen, hinzufügen ein Punkt, um den Charakter Klasse, da Abkürzungen wie "st." und "ave." auftauchen. Dann würde es so Aussehen:
Ihre regex enthält nur Buchstaben und Ziffern und keine provision für die überprüfung von Raum-oder tab -
versuchen Sie, folgende regex seine Arbeit
Ich nahm die Frage wörtlich, hat eine Adresse, eine Hausnummer, ein Platz, eine Straße name.
Einen post-code hat einige Buchstaben, einige zahlen und Raum, einige zahlen, endlich mal mehr Briefe
Natürlich, wenn ich nicht live bei '1 The Road' aber an 'myHouse Der Straße'.
Autsch, was zu tun ist, das Komma und was ist passiert, die zahlen. Dies ist wahrscheinlich eine gute Zeit, um validateAddressLine($Adresse) in eine Funktion, so dass Sie verbessern können, es später. Und speichern Sie eine log-Meldung, jedes mal wenn es falsch ist, dann können Sie überprüfen, um zu sehen, wenn Sie blockiert haben, ein format, das Sie nicht erwartet haben. [Dies beinhaltet auch, man sollte nicht zu streng mit der html-Validierung, lassen Sie den server überprüfen und zu protokollieren.]
Hier einige Funktionen, die ich vor kurzem gemacht für eine einfache Website. Es ist basic und nicht-lookup Postleitzahl, um zu sehen, wenn vorhanden, oder überprüfen, ob Postleitzahl korrekte Struktur (Brief(E)s : Nummer(N) : letter(s) etc). Es ermöglicht nur A-z0-9 und Raum, wie Sie angegeben sind (einige Adressen mit Kommas oder apostrophe, die können leicht Hinzugefügt werden, in der regex).
Habe ich eine Funktion damit Raum, die nicht überprüft verschiedene Dinge, die es könnte, wie wenn der Raum ist in der richtigen Stelle, oder wenn nur einer von Ihnen, ich brauchte keine dieser für die basic Website, fühlen Sie sich frei, zu ändern, wo Sie Sie benötigen.
größten britischen postcode (ohne Leerzeichen) 7 chars (afaik), so bemerken, wenn der Platz es erlaubt ist, in der letzten Funktion strlen akzeptiert 5-8.
dann auf der form-Seite, so etwas wie
Können Sie ändern Sie die return = false " auf die Funktionen, um text zu, wenn Sie möchten, dass das Formular prüfen Sie jedes Feld, zum Beispiel "Ok". Einfach überprüfen, ob alle Zeichenfolgen == "Ok" dann.
In dieser Seite gibt es einige reguläre Ausdrücke für die verschiedenen Länder:
http://www.pixelenvision.com/1708/zip-postal-code-validation-regex-php-code-for-12-countries/
Den regulären Ausdruck für die Niederlande hat das gleiche problem wie bereits für den regulären Ausdruck zur Verfügung gestellt von Georges Brisset. Es sollte sein:
Georges Brisset geliefert hat Sie eine Menge von regulären Ausdrücken und die ist Super. Könnten Sie eine Eigenschaftendatei erstellen und wenn Sie die Notwendigkeit der Validierung erhalten Sie die richtige reguläre Ausdruck aus dieser Datei und testen Sie die Eingabe mit.
Den Inhalt einer solchen Datei wäre so etwas wie dieses:
Den Schlüssel-Wert-ist die offizielle Abkürzung des Landes. Die Liste kann hier gefunden werden:
http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm
Nach, dass Sie gerade Lesen Sie die Datei mit:
gibt den Inhalt der Datei als array zurück. Nächsten Sie eine Schleife durch die Liste (ich würde sagen, dass Sie, um die Liste mit Bezug auf die chance, dass Sie zum testen der Postleitzahl von einem bestimmten Land) und führen Sie den Ausdruck hinter dem = - Zeichen.
Sollte es funktionieren, wenn du die Leerzeichen vor dem Bindestrich:
nach dem Bindestrich würde es interpretiert werden als der Bereich von Unterstrich zu Leerzeichen.
Hoffe, das hilft 🙂
Für Die Niederlande streetnames ich würde vorschlagen:
\^[a-zA-Z]+\s[0-9]+[a-zA-Z]?$\
Wobei [a-zA-Z]+ ist die streetname
\s der Raum zwischen streetname und die Anzahl
[0-9]+ alle Ziffern nach der streetname
[a-zA-Z]? die möglichen add-on nach den Ziffern
Möglich streetnames:
Amsterdamseweg 2<br>
Hilversumsestraat 38a