@@ -15,6 +15,15 @@ import { useParams } from "next/navigation";
1515import { useState } from "react" ;
1616import toast from "react-hot-toast" ;
1717
18+ const IBAN_REGEX = / ^ [ A - Z ] { 2 } [ 0 - 9 ] { 2 } [ A - Z 0 - 9 ] { 4 } [ 0 - 9 ] { 7 } ( [ A - Z 0 - 9 ] ? ) { 0 , 16 } $ / ;
19+ const BIC_REGEX = / ^ [ A - Z ] { 4 } [ A - Z ] { 2 } [ A - Z 0 - 9 ] { 2 } ( [ A - Z 0 - 9 ] { 3 } ) ? $ / ;
20+
21+ const formatIban = ( iban : string ) =>
22+ iban
23+ . replace ( / \s / g, "" )
24+ . replace ( / ( .{ 4 } ) / g, "$1 " )
25+ . trim ( ) ;
26+
1827export default function ExternalEhrenamtspauschalePage ( ) {
1928 const { id } = useParams < { id : Id < "volunteerAllowance" > } > ( ) ;
2029
@@ -86,8 +95,10 @@ export default function ExternalEhrenamtspauschalePage() {
8695 if ( amount > 840 ) return toast . error ( "Maximal 840€ erlaubt" ) ;
8796 if ( ! form . accountHolder )
8897 return toast . error ( "Bitte den Kontoinhaber eingeben" ) ;
89- if ( ! form . iban ) return toast . error ( "Bitte die IBAN eingeben" ) ;
90- if ( ! form . bic ) return toast . error ( "Bitte die BIC eingeben" ) ;
98+ const iban = form . iban . replace ( / \s / g, "" ) . toUpperCase ( ) ;
99+ const bic = form . bic . replace ( / \s / g, "" ) . toUpperCase ( ) ;
100+ if ( ! IBAN_REGEX . test ( iban ) ) return toast . error ( "Ungültige IBAN" ) ;
101+ if ( ! BIC_REGEX . test ( bic ) ) return toast . error ( "Ungültige BIC" ) ;
91102 if ( ! form . confirmation )
92103 return toast . error ( "Bitte die Bestätigung ankreuzen" ) ;
93104 if ( ! signatureStorageId ) return toast . error ( "Bitte unterschreiben" ) ;
@@ -97,8 +108,8 @@ export default function ExternalEhrenamtspauschalePage() {
97108 await submitExternal ( {
98109 id,
99110 amount,
100- iban : form . iban ,
101- bic : form . bic ,
111+ iban,
112+ bic,
102113 accountHolder : form . accountHolder ,
103114 activityDescription : form . activityDescription ,
104115 startDate : form . startDate ,
@@ -277,19 +288,25 @@ export default function ExternalEhrenamtspauschalePage() {
277288 < div >
278289 < Label > IBAN *</ Label >
279290 < Input
280- value = { form . iban }
281- onChange = { ( event ) => updateField ( "iban" , event . target . value ) }
291+ value = { formatIban ( form . iban ) }
292+ onChange = { ( event ) =>
293+ updateField ( "iban" , event . target . value . replace ( / \s / g, "" ) )
294+ }
282295 placeholder = "DE89 3704 0044 0532 0130 00"
283296 className = "font-mono"
297+ maxLength = { 27 }
284298 />
285299 </ div >
286300 < div >
287301 < Label > BIC *</ Label >
288302 < Input
289- value = { form . bic }
290- onChange = { ( event ) => updateField ( "bic" , event . target . value ) }
303+ value = { form . bic . toUpperCase ( ) }
304+ onChange = { ( event ) =>
305+ updateField ( "bic" , event . target . value . toUpperCase ( ) )
306+ }
291307 placeholder = "COBADEFFXXX"
292308 className = "font-mono"
309+ maxLength = { 11 }
293310 />
294311 </ div >
295312 </ div >
0 commit comments