<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.validate.set.post_code">
    <title>PostCode</title>

    <para>
        <classname>Zend_Validate_PostCode</classname> erlaubt es zu eruieren ob ein angegebener
        Wert eine gültige Postleitzahl ist. Postleitzahlen sind spezifisch für Städte und in einigen
        Gebietsschemata auch als <acronym>ZIP</acronym> Codes bezeichnet.
    </para>

    <para>
        <classname>Zend_Validate_PostCode</classname> kennt mehr als 160 unterschiedliche Formate
        für Postleitzahlen. Um das richtige Format auszuwählen gibt es 2 Wege. Man kann entweder
        ein voll qualifiziertes Gebietsschema verwenden, oder ein eigenes Format manuall setzen.
    </para>

    <para>
        Die Verwendung eines Gebietsschemas ist bequemer da Zend Framework bereits die
        entsprechenden Formate für Postleitzahlen für jedes Gebietsschema kennt; aber muss man
        ein voll qualifiziertes Gebietsschema verwenden (eines das eine Region spezifiziert) damit
        es funktioniert. Das Gebietsschema "de" zum Beispiel ist zwar ein Gebietsschema, kann aber
        nicht mit <classname>Zend_Validate_PostCode</classname> verwendet werden da es keine
        Region enthält; "de_AT" andererseits würde ein gültiges Gebietsschema sein da es den
        Region Code spezifiziert ("AT", für Österreich).
    </para>

    <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_PostCode('de_AT');
]]></programlisting>

    <para>
        Wenn man das Gebietsschema nicht selbst setzt, dann verwendet
        <classname>Zend_Validate_PostCode</classname> das anwendungsweit gesetzte Gebietsschema,
        oder wenn keines vorhanden ist, das Gebietsschema welches von
        <classname>Zend_Locale</classname> zurückgegeben wird.
    </para>

    <programlisting language="php"><![CDATA[
// Anwendungsweites Gebietsschema in der Bootstrap
$locale = new Zend_Locale('de_AT');
Zend_Registry::set('Zend_Locale', $locale);

$validator = new Zend_Validate_PostCode();
]]></programlisting>

    <para>
        Man kann das Gebietsschema auch im Nachhinein ändern, indem man
        <methodname>setLocale()</methodname> aufruft. Und natürlich kann man das aktuelle
        Gebietsschema erhalten indem <methodname>getLocale()</methodname> aufgerufen wird.
    </para>

    <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_PostCode('de_AT');
$validator->setLocale('en_GB');
]]></programlisting>

    <para>
        Postleitzahlen Formate selbst sind einfache Regular Expression Strings. Wenn das
        internationale Postleitzahlen Format, welches durch das Setzen des Gebietsschemas verwendet
        wird, den eigenen Bedüfnissen nicht entspricht, dann kann man ein Format auch manuell setzen
        indem <methodname>setFormat()</methodname> aufgerufen wird.
    </para>

    <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_PostCode('de_AT');
$validator->setFormat('AT-\d{5}');
]]></programlisting>

    <note>
        <title>Konventionen für selbst definierte Formate</title>

        <para>
            Wenn selbst definierte Formate verwendet werden sollten die Start-
            (<command>'/^'</command>) und Endetags (<command>'$/'</command>) nicht angegeben werden.
            Sie werden automatisch hinzugefügt.
        </para>

        <para>
            Man sollte darauf achtgeben das Postleitzahlen Werte immer auf einer strikte Art
            geprüft werden. Das bedeutet das Sie alleinstehend geschrieben werden müssen, ohne
            zusätzliche Zeichen, wenn diese nicht durch das Format abgedeckt werden.
        </para>
    </note>

    <sect3 id="zend.validate.set.post_code.constructor">
        <title>Optionen des Constructors</title>

        <para>
            Grundsätzlich kann man dem Contructor von <classname>Zend_Validate_PostCode</classname>
            entweder ein <classname>Zend_Locale</classname> Objekt, oder einen String der ein voll
            qualifiziertes Gebietsschema repräsentiert, angeben.
        </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_PostCode('de_AT');
$validator = new Zend_Validate_PostCode($locale);
]]></programlisting>

        <para>
            Zusätzlich kann man dem Contructor entweder ein Array oder ein
            <classname>Zend_Config</classname> Objekt übergeben. Wenn man das tut, muss man
            entweder den Schlüssel "locale" oder "format" verwenden; diese werden verwendet um die
            betreffenden Werte im Prüfobjekt zu setzen.
        </para>

        <programlisting language="php"><![CDATA[
$validator = new Zend_Validate_PostCode(array(
    'locale' => 'de_AT',
    'format' => 'AT_\d+'
));
]]></programlisting>
    </sect3>

    <sect3 id="zend.validate.set.post_code.options">
        <title>Unterstützte Optionen für Zend_Validate_PostCode</title>

        <para>
            Die folgenden Optionen werden für <classname>Zend_Validate_PostCode</classname>
            unterstützt:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><property>format</property></emphasis>: Setzt das Postleitzahl-Format
                    welches für die Prüfung der Eingabe verwendet werden soll.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>locale</property></emphasis>: Setzt ein Gebietsschema von
                    dem die Postleitzahl genommen wird.
                </para>
            </listitem>
        </itemizedlist>
    </sect3>
</sect2>
