Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 10 PHP
  gp 10.1 PHP_Beautifier
  gp 10.2 PHP_CompatInfo
  gp 10.3 PHP_Compat
  gp 10.4 Validate


Rheinwerk Computing

10.4 Validate  toptop


Besprochene Version: 0.4.1 Lizenz: PHP-Lizenz
Klassendatei(en): Validate.php; Validate/US.php; Validate/UK.php; Validate/ptBR.php; Validate/PL.php; Validate/NL.php; Validate/FR.php; Validate/ES.php; Validate/DE.php; Validate/CH.php; Validate/AT.php; Validate/Finance.php; Validate/Finance/IBAN.php

Das Paket PHP_Validate ist eine Art Schweizer Messer zum Überprüfen von allen möglichen Werten. Primär ist es Aufgabe des Pakets, Zahlenwerte wie Kreditkarten- oder ISBN-Nummern zu überprüfen, da diese oft eine Prüfziffer enthalten. Des Weiteren können auch Texte wie E-Mail-Adressen geprüft werden, die nach einem bestimmten festgelegten Schema aufgebaut sind.

Hierbei sollten Sie immer im Hinterkopf haben, dass eine gültige Kreditkartennummer nicht unbedingt auch existieren muss. Das Paket kann nur prüfen, ob die Daten gültig sein könnten, also in sich konsistent sind, nicht aber, ob sie das auch wirklich sind.

Die meisten Funktionen im Paket sind statisch definiert, so dass es nicht notwendig ist, ein Objekt zu instanziieren. Prüffunktionen, die allgemein gültig sind, sind in der Datei PHP/Validate.php definiert. Landesspezifische Prüfungen sind in den Dateien im Unterverzeichnis PHP/Validate/ zu finden. Die landesspezifischen Dateien haben alle einen unterschiedlichen Leistungsumfang. Teilweise werden Sozialversicherungsnummern geprüft, teilweise sind es Postleitzahlen oder Bankleitzahlen.

Um zu prüfen, um ob eine Variable einen String oder eine Zahl enthält, sind die beiden Methoden string() und number() vorgesehen, die – wie die anderen Methoden auch – einen booleschen Wert als Ergebnis liefern. string() bekommt als ersten Parameter die zu testende Variable übergeben. Der zweite Parameter ist ein Array mit Optionen, die definieren, nach welchem Schema der Variableninhalt zu testen ist. Der Schlüssel 'format' definiert, nach welchem Schema der Inhalt aufgebaut sein darf. Hierzu sind die Konstanten aus Tabelle 10.2 definiert.


Tabelle 10.2 Konstanten zum Prüfen eines Strings
Kontante Erläuterung
VALIDATE_NUM Ziffern von 0 bis 9
VALIDATE_SPACE Beliebige Folge von Whitespaces
VALIDATE_ALPHA_LOWER Kleinbuchstaben von a-z
VALIDATE_ALPHA_UPPER Großbuchstaben von A-Z
VALIDATE_ALPHA Buchstaben a-z und A-Z
VALIDATE_EALPHA_LOWER Kleine Sonderzeichen wie ä, ü oder é
VALIDATE_EALPHA_UPPER Große Sonderzeichen wie Ä,Ü oder É
VALIDATE_EALPHA Kleine und große Sonderzeichen
VALIDATE_PUNCTUATION Satzzeichen (, ? ! …)

Diese Konstanten können auch miteinander kombiniert werden, indem Sie sie mit dem String-Verbindungsoperator (Punkt-Operator) miteinander verknüpfen.

Des Weiteren können Sie in dem Array die Schlüssel 'min_length' und 'max_length' mit Werten belegen, die die minimal erforderliche und die maximal akzeptable Stringlänge definieren.

Mit number() ist es möglich, eine Variable darauf zu testen, ob sie eine Zahl enthält, die einer bestimmten Vorgabe entspricht. Auch hier wird die zu prüfende Variable als Erstes übergeben. Optional kann ein zweiter Parameter genutzt werden, mit dem Sie auch hier festlegen können, welchem Schema die Zahl entsprechen soll. Das Array, das hier genutzt werden kann, unterstützt die Schlüssel 'decimal', 'dec_prec', 'min' und 'max'. Mit dem ersten können Sie Zeichen übergeben, die in der Zahl enthalten sein dürfen. Mit dem String '.,' würden Sie den Punkt und das Komma als zulässig deklarieren. 'dec_prec' legt fest, aus wie vielen Ziffern die Zahl bestehen darf, und die beiden anderen Schlüssel geben Ihnen die Möglichkeit, einen minimal erforderlichen bzw. einen maximal zulässigen Wert zu deklarieren.

Sehr hilfreich ist auch die Methode date(), die die Gültigkeit eines Datums testen kann. Auch hierbei wird die Variable mit dem potenziellen Datum an erster Stelle übergeben. Da die Methode nicht selbstständig erkennen kann, was Tag, Monat oder Jahr sein soll, müssen Sie diese Information mit dem zweiten Parameter bereitstellen. Der zweite Parameter ist ein Array, bei dem mit dem Schlüssel 'format' der Formatbeschreiber des Datums übergeben wird. Dieser ist nach demselben Schema aufzubauen, das für die PHP-Funktion strftime() definiert ist. Der Schlüssel 'min' legt eine Untergrenze und der Schlüssel 'max' legt eine Obergrenze fest.

$options = array('format' => '%d.%m.%Y', 
                 'min' =>'01.01.2005', 
                 'max' =>'31.12.2006', 
           )

Mit diesem Array würde also definiert, dass das übergebene Datum sich aus Tag, Monat und Jahr, getrennt durch Punkte, zusammensetzen muss und zwischen dem ersten Januar 2005 und dem 31. Dezember 2006 liegen muss.

Um die Gültigkeit einer E-Mail-Adresse zu prüfen, ist die Methode email() vorgesehen.

require_once('Validate.php'); 
 
$mail="cmoehrke@netviser.de"; 
 
if (true===Validate::email($mail)) 
{ 
   echo 'Die Adresse ist g&uuml;ltig'; 
} 
else 
{ 
   echo 'Die Adresse ist ung&uuml;ltig'; 
}

Listing 10.4 Überprüfen einer E-Mail-Adresse mit PEAR::Validate

Die Methode email() akzeptiert übrigens noch einen zweiten, booleschen Parameter. Übergeben Sie ein logisches Wahr, so wird auch gleich die Existenz der Domain geprüft, was allerdings nur dann funktionieren kann, wenn der Rechner, auf dem das Script ausgeführt wird, Zugang zum Internet hat.

Zum Überprüfen einer URI ist die Methode uri() vorgesehen. Diese bekommt als ersten Parameter den String übergeben, der daraufhin geprüft werden soll, ob er eine gültige URI nach RFC 2396 [Der komplette RFC ist unter http://www.faqs.org/rfcs/rfc2396.html zu finden. ] darstellt. Der zweite, optionale Parameter definiert, wie geprüft werden soll. Hierzu wird ein Array genutzt, das die Schlüssel 'domain_check' und 'allowed_schemes' unterstützt. Mit dem ersten können Sie auf Basis eines booleschen Wertes festlegen, ob die Existenz der Domain geprüft werden soll. Der zweite Schlüssel kann auf ein Array verweisen, in dem die unterstützten Schemata bzw. Protokolle definiert sind. Übergeben Sie hiermit die Strings 'http' und 'ftp', so werden nur URIs mit diesen Protokollen akzeptiert.

Darüber hinaus sind einige Funktionen definiert, um spezielle Zahlen auf Gültigkeit zu testen. Die Methoden aus Tabelle 10.3 bekommen alle nur einen Wert übergeben und liefern einen booleschen Wert zurück.


Tabelle 10.3 Methoden zum Prüfen verschiedener Kennzahlen
Methode Beschreibung
creditCard() Prüft eine Kreditkartennummer.
ean13() Verifiziert einen EAN 13-Code.
ean14() Testet einen EAN 14-Code.
ean8() Überprüft einen EAN 8-Code.
isbn() Prüft eine ISBN (International Standard Book Number).
ismn() Validiert eine ISMN (International Standard Music Number).
issn() Testet eine ISSN (International Standard Serial Number) für Zeitschriften etc.
sscc() Prüft einen SSCC (Serial Shipping Container Code).
ucc12() Validiert einen UCC-12-Code.

Einige weitere allgemein gültige Funktionen sind in der Datei Validate/Finance.php definiert. Zwar sind momentan nur zwei Methoden definiert, aber ich hoffe, dass sich hier in Zukunft noch ein paar weitere Funktionen finden werden.

Die erste Methode heißt banknoteEuro(). Sie dient dazu, die Gültigkeit der Nummer eines Euro-Geldscheins zu prüfen, die als Parameter übergeben wird. Wichtig dabei ist, dass die übergebene Nummer kein Leerzeichen enthalten darf, was häufig genutzt wird, um den Anfangsbuchstaben von der eigentlichen Nummer zu trennen.

require_once('Validate/Finance.php'); 
// $nummer kommt normalerweise aus einem Formular 
$nummer='X 00768169352'; 
// Leerzeichen eliminieren 
$nummer=str_replace(' ','',$nummer); 
if (true === Validate_Finance::banknoteEuro($nummer)) 
{ 
   echo 'Nummer ist korrekt'; 
} 
else 
{ 
   echo 'Nummer ist nicht korrekt'; 
}

Listing 10.5 Prüfen einer Banknotennummer mit PEAR::Validate

Die zweite Methode ist iban(). Mit ihr können Sie eine »International Bank Account Number« auf Gültigkeit prüfen. Auch sie bekommt den zu prüfenden Wert als Parameter übergeben, wobei Sie beachten sollten, dass auch hier keine Leerzeichen zur Abtrennung innerhalb der IBAN zulässig sind. Zur Prüfung gibt es zwei Ansätze. Nutzen Sie die Methode statisch, liefert sie nur ein true oder ein false.

require_once('Validate/Finance.php'); 
// IBAN kommt normalerweise aus einem Formular 
$iban='DE32 2508 0020 0113 0900 00'; 
$iban=str_replace(' ','',$iban); 
$res=Validate_Finance::iban($iban); 
 
if (true === $res) 
{ 
   echo 'IBAN ist korrekt'; 
} 
else 
{ 
   echo 'IBAN ist nicht korrekt'; 
}

Listing 10.6 Prüfung einer IBAN mit statischem Aufruf

Sie haben alternativ auch die Möglichkeit, mit einem Validate_Finance_IBAN-Objekt zu arbeiten. Das hat den Vorteil, dass Sie mehr Informationen darüber erhalten können, welcher Fehler bei der Prüfung festgestellt wurde.

require_once('PEAR.php'); 
require_once('Validate/Finance/IBAN.php'); 
 
$iban='DE32 2508 0020 0113 0900 00'; 
$iban=str_replace(' ','',$iban); 
 
 
$val=new Validate_Finance_IBAN($iban); 
$res = $val->validate(); 
if (true===PEAR::isError($res)) 
{ 
   die ($res->getMessage()); 
} 
 
if (true === $res) 
{ 
   echo 'IBAN ist korrekt'; 
} 
else 
{ 
   $fehler=array( 
            VALIDATE_FINANCE_IBAN_ERROR 
              => 'Unbekannter Fehler', 
            VALIDATE_FINANCE_IBAN_GENERAL_INVALID 
              => 'IBAN ung&uuml;ltig', 
            VALIDATE_FINANCE_IBAN_TOO_SHORT 
              => 'IBAN zu kurz', 
            VALIDATE_FINANCE_IBAN_TOO_LONG 
              => 'IBAN zu lang', 
            VALIDATE_FINANCE_IBAN_COUNTRY_INVALID 
              => 'IBAN-Landescode ist ung&uuml;ltig', 
            VALIDATE_FINANCE_IBAN_INVALID_FORMAT 
              => 'IBAN hat ein ung&uuml;ltiges Format', 
            VALIDATE_FINANCE_IBAN_CHECKSUM_INVALID 
              => 'IBAN hat eine ung&uuml;ltige Pr&uuml;fsumme' 
         ); 
   $code=$val->getErrorcode(); 
   echo "IBAN ist nicht korrekt<br />Grund: $fehler[$code]";

Listing 10.7 Prüfung einer IBAN

Um ein Objekt zu instanziieren, müssen Sie die Datei Validate/ Finance/IBAN.php einbinden.

Im Abschnitt über die Fehlerbehandlung konnten Sie schon erkennen, dass verschiedene Konstanten definiert sind, mit denen das Objekt Ihnen mitteilen kann, welcher Fehler aufgetreten ist. Für das Auslesen des Fehlercodes ist die Methode getErrorcode() zuständig.

Wie schon erwähnt wurde, sind darüber hinaus unterschiedlichste Methoden für landesspezifische Überprüfungen vorgesehen. Ich werde hier nur auf die Funktionalitäten für Deutschland, Österreich und die Schweiz eingehen.

Für Deutschland ist die Datei Validate/DE.php zuständig. Diese definiert die statischen Methoden bankcode() und postcode(), mit denen eine Bankleitzahl und Postleitzahl geprüft werden können:

require_once('Validate/DE.php'); 
$plz='33619'; 
if (true==Validate_DE::postcode($plz)) 
{ 
   echo 'Die PLZ ist korrekt'; 
} 
else 
{ 
   echo 'Die PLZ ist nicht korrekt'; 
}

Listing 10.8 Prüfen einer deutschen Postleitzahl

Bitte beachten Sie hierbei, dass diese Methoden immer in landesspezifischen Klassen definiert sind: für Deutschland also Validate_DE, für Österreich Validate_AT und so weiter. Des Weiteren liefern die »deutschen Methoden« keinen booleschen Wert, sondern einen Integer-Wert zurück, so dass Sie mit == und nicht mit === arbeiten sollten.

Gleiches gilt für die Methode zum Prüfen von österreichischen Postleitzahlen, die auch postcode() heißt und in der Datei Validate/AT.php definiert ist. Diese bietet darüber hinaus aber noch die Möglichkeit, mit einem true als zweitem Parameter zu prüfen, ob diese Postleitzahl auch existiert. Im ersten Fall wird nur geprüft, ob der String aus exakt vier Ziffern besteht. Im zweiten Fall wird auf Basis einer Liste von existierenden Postleitzahlen geprüft, ob die Zahl korrekt ist.

Die zweite für Österreich definierte Methode ist ssn(), mit der eine Sozialversicherungsnummer geprüft werden kann.

Diese beiden Methoden sind mit identischem Verhalten auch in der Datei Validate/CH.php für die Schweiz definiert. Zusätzlich ist in diesem Fall noch die Methode studentid() vorhanden, die eine Immatrikulationsnummer einer Schweizer Universität prüfen kann.

Um herauszufinden, welche Funktionalitäten für die anderen Länder definiert sind, möchte ich Sie auf die Online-Dokumentation unter http://pear.php. net/package/Validate/docs verweisen, da die Besprechung aller Länder hier den Rahmen sprengen würde.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de