Hallo zusammen,
ich wollte ein Eingabefeld definieren, in welchem nur eine 10-stellige Nummer zugelassen ist und hatte entsprechend eine CMS_INPUT_NUMBER Eingabekomponente definiert, welches ich über die Regeln ON_SAVE validieren wollte, da dies anschließend in Datenquellen eingepflegt werden kann. Dies wäre besonders bei Artikel-, oder Produktnummern interessant, die eine feste Länge haben.
Nun hatte ich folgende Regeln aufgebaut:
<ON_SAVE>
<WITH>
<EQUAL>
<PROPERTY source="tt_xvariable" name="LENGTH" />
<NUMBER>10</NUMBER>
</EQUAL>
</WITH>
<DO>
<VALIDATION>
<PROPERTY source="tt_xvariable" name="VALID" />
<MESSAGE lang="*" text="bitte eine 10-stellige Nummer eintippen" />
</VALIDATION>
</DO>
</ON_SAVE>
Welche leider nicht gegriffen hat, da ich die Länge von dem CMS_INPUT_NUMBER nicht abfragen konnte, sondern nur den VALUE.
Aber weil ja auch Werte wie "0000000001" zugelassen sind, jedoch keine "1" konnt ich keinen Bereich an Zahlen definieren, die in
der Regel von 0000000001 bis 9999999999 abgefangen werden können, weil im CMS_INPUT_NUMBER 0000000001 = 1 ist.
Nun fange ich die 10-stellige Nummer folgendermaßen ab:
| <ON_SAVE> |
| <WITH> |
| | <MATCHES regex="[0-9]{10}"> |
| | | <PROPERTY source="tt_xvariable" name="VALUE" /> |
| | </MATCHES> |
| </WITH> |
| <DO> |
| | <VALIDATION> |
| | | <PROPERTY source="tt_xvariable" name="VALID" /> |
| | | <MESSAGE lang="*" text="bitte eine 10-stellige Nummer eintippen" /> |
| | </VALIDATION> |
| </DO> |
</ON_SAVE>
Nur leider ist diese Eingabekomponente keine INPUT_NUMBER mehr, sondern eine INPUT_TEXT Eingabe und auch der Datentyp in der Datenbank ist entsprechend zu einem String geworden, anstelle eines Integer.
Eine Längenprüfung für INPUT_NUMBER wäre an dieser Stelle sehr hilfreich gewesen, damit der richtige Datentyp verwaltet werden kann.