Überprüfung der Feldeingabe für die Kontonummer

Moin,

kann mir jemand sagen, wo in v4.5 die Prüfung der Eingabe der Kontonummer und BLZ auf numerische Eingaben stattfindet?
Würde die gerne anpassen und finde das nicht wirklich, finde aber den enstprechenden Punkt in der payments.php nicht.

Dort gibt es zwar ein Callback auf eine isValidePayment(), die dafür scheinbar zuständig ist, aber ich finde nicht raus, in welcher Klasse oder Controller die zu finden ist.
Vielleicht liege ich ja auch komplett falsch?!

Wär nett, wenn jemand mir das beantworten könnte.
Danke

War die Frage so blöd oder so gut?
:slight_smile:

kann mir nicht vorstellen, daß mir das keiner beantworten kann…

Hallo Arnedrews,
schaue dir mal das an. (Zeile 185 - 195):

[B][I]dein_shop/core/oxinputvalidator.php[/I][/B]

Grüße
Rafig

Das ist es. Danke Dir!!!

Hi,

Danke nochmal [I]markus26[/I] für den Hinweis, so konnte ich die nötigen Anpassungen durchführen.
Für alle, die die Angabe der Bankverbindung schon mal SEPA-“tauglich” machen wollen, poste ich hier mal, was ich gemacht habe:

Datei: [I]core/oxinputvalidator.php[/I]
Methode: [I]validatePaymentInputData[/I]
Zeile: [I]ab 186[/I] (sofern sich die Datei im Originalzustand befindet!)

[U]Diesen Teil:[/U]


// cleaning up spaces
$aDynvalue['lsblz']   = str_replace( ' ', '', $aDynvalue['lsblz'] );
$aDynvalue['lsktonr'] = str_replace( ' ', '', $aDynvalue['lsktonr'] );


//if konto number is shorter than 10, add zeros in front of number
if ( $oStr->strlen( $aDynvalue['lsktonr'] ) < 10 ) {
    $sNewNum = str_repeat( '0', 10 - $oStr->strlen( $aDynvalue['lsktonr'] ) ).$aDynvalue['lsktonr'];
    $aDynvalue['lsktonr'] = $sNewNum;
}

if ( $oStr->preg_match( "/^\d{5,8}$/", $aDynvalue['lsblz'] ) && $oStr->preg_match( "/\d{10}/", $aDynvalue['lsktonr'] ) ) {
    $blOK = true;
}

[U]ersetzen durch diesen:[/U]


// cleaning up spaces
list( $aDynvalue['lsblz'], $aDynvalue['lsktonr'] ) = str_replace( ' ', '', array($aDynvalue['lsblz'], $aDynvalue['lsktonr']) );

// checking on classic lsblz
if ( !$oStr->preg_match('/^\d{5,8}$/', $aDynvalue['lsblz']) ) {
    
    // transform lsblz and lsktonr to uppercase like swift/bic and iban codes
    list( $aDynvalue['lsblz'], $aDynvalue['lsktonr'] ) = array_map( 'strtoupper', array($aDynvalue['lsblz'], $aDynvalue['lsktonr']) );

    // checking layout of swift/bic and iban code
    $blIsSwiftBIC = ( $oStr->preg_match('/^[\dA-Z]{8}$|^[\dA-Z]{11}$/', $aDynvalue['lsblz']) );
    $blIsIBAN = ( $oStr->preg_match('/^[A-Z]{2}\d{2}[\dA-Z]{18,30}$/', $aDynvalue['lsktonr']) );
    
    $blOK = ( $blIsIBAN && $blIsSwiftBIC );
    
} else {

    //if konto number is shorter than 10, add zeros in front of number
    $aDynvalue['lsktonr'] = ( $oStr->strlen($aDynvalue['lsktonr']) < 10 )?
            str_repeat( '0', 10 - (integer)$oStr->strlen($aDynvalue['lsktonr']) ) . $aDynvalue['lsktonr']:
            $aDynvalue['lsktonr'];

    $blOK = $oStr->preg_match( '/\d{10}/', $aDynvalue['lsktonr'] );

}

Solltet ihr nur auf deutsche IBAN´s testen wollen, könnt ihr ne kürzere Variante der Prüfung dafür wählen:


$blIsIBAN = $oStr->preg_match( '/^[A-Z]{2}\d{20}$/', $aDynvalue['lsktonr'] );

Damit bestehen die Felder für die Bankleitzahl und Kontonummer auch die Eingabe von Swift/BIC bzw. IBAN.
Ihr solltet zusätzlich noch die Labels der Felder ändern, so daß der Kunde weiß, daß er die Daten dort eintragen kann.

[B][I]Bitte denkt dran, daß ihr euch eine Kopie der “oxinputvalidator.php” macht, damit ihr im Zweifelsfall jederzeit wieder zurücksetzen könnt![/I][/B]

Grüße
Arne

Hallo Arne,

vielen Dank für’s Posten dieser Lösung. Genau das ist in der 4.8 eingebaut:

Ggf. kann man solche Änderungen auch im dev-Branch nachschlagen:
https://github.com/OXID-eSales/oxideshop_ce/tree/b-dev-ce

Gruß