Formatierung von Zahlen testen
Paul
- xsl
0 ChrisB0 ThomasM0 Paul0 Gunnar Bittersmann0 ThomasM
0 Gunnar Bittersmann0 MudGuard
Moin.
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
Beispiele (in Klammern gefährliche Werte):
<xsl:if test="number() and string-length() = 8">
(123456.7)
<xsl:if test="number() and string-length(round()) = 8">
(12345678.9)
<xsl:if test="number() > 9999999 and number() < 10000000">
(12345678a)
...
Paul
Hi,
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
In XSLT2 gibt's auf jeden Fall reguläre Ausdrücke - http://www.xml.com/pub/a/2003/06/04/tr.html
MfG ChrisB
In XSLT2
Oh, sorry. Hab's vergessen: XSLT 1.0
Hi,
Oh, sorry. Hab's vergessen: XSLT 1.0
Kannst du damit was anfangen?
http://www.dpawson.co.uk/xsl/sect2/N5846.html#d8004e208
MfG ChrisB
Kannst du damit was anfangen?
http://www.dpawson.co.uk/xsl/sect2/N5846.html#d8004e208
Wenn ich ehrlich bin nicht ...
Hallo Paul,
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
Ansatz:
<xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>
Grüße,
Thomas
Moin Thomas.
<xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>
Was ist wenn der Wert 123456.7 ist? (Hatte ich auch als Beispiel in meiner Frage).
Gruß,
Paul
@@ThomasM:
nuqneH
<xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>
'01234567'?
Qapla'
Hallo Gunnar,
<xsl:if test="number($wert) and string-length(string($wert)) = 8">passt</xsl:if>
'01234567'?
Klar, war ein Schnellschuss. Wollte noch als and-Bedingungen not(contains($wert, '.')) und einen substring()-Test auf führende Null hinzufügen, kam aber so schnell nicht dazu. Die anderen Lösungen, speziell mit translate(), sind auch interessant.
Mit XSLT / XPath 2.0 lassen sich solche Dinge viel generischer angehen …
Grüße,
Thomas
@@Paul:
nuqneH
<xsl:if test="number() and string-length() = 8">
(123456.7)
<xsl:if test="number() and string-length(round()) = 8">
(12345678.9)
<xsl:if test="number() > 9999999 and number() < 10000000">
(12345678a)
Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?
Qapla'
@@Gunnar Bittersmann:
nuqneH
Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?
'1.234E+3' argl.
Oder kennt XSLT diese Schreibweise mit Mantisse und Exponent gar nicht?
Qapla'
'1.234E+3' argl.
OK. Dann müsste man wohl etwas mehr Zeit/Zeilen investieren. Mir reicht vorerst die "einfache Schreibweise".
Danke trotzdem für den Hinweis,
Paul
Neuer Vorschlag:
<xsl:when test="number() and string-length() = 8">
<xsl:if test="number(substring(.,1,1))">
<xsl:if test="number(substring(.,2,1))">
<xsl:if test="number(substring(.,3,1))">
<xsl:if test="number(substring(.,4,1))">
<xsl:if test="number(substring(.,5,1))">
<xsl:if test="number(substring(.,6,1))">
<xsl:if test="number(substring(.,7,1))">
<xsl:if test="number(substring(.,8,1))">
alles klar
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:if>
Passt soweit es keine 0 innerhalb des Wertes gibt. 0 ist wohl laut numer() keine Zahl...
Passt soweit es keine 0 innerhalb des Wertes gibt. 0 ist wohl laut numer() keine Zahl...
Man müsste bei jedem
<xsl:if test="number(substring(.,3,1))">
noch einen kleine Wert hinzu addieren:
<xsl:if test="number(substring(.,3,1)+0.1)">
Aber mir reicht die einfache Form ohne die vielen if's.
Paul
@@Gunnar Bittersmann:
nuqneH
Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?
'+1234567' argl.
Qapla'
Sollte nicht die Kombination von (1) und (3) das Gewünschte bringen?
Ich versuch's mal...
Om nah hoo pez nyeetz, Paul!
<wissen_aus_anderen_Sprachen> wert == trunc(wert) ? ganze Zahl : keine ganze Zahl; </wissen_aus_anderen_Sprachen>
Matthias
Hi,
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
Prüfen, ob string-length(DeinWert) = 8 und translate(DeinWert, "0123456789", "9999999999") = "9999999999" ist.
cu,
Andreas
Hi,
Hi,
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
Prüfen, ob string-length(DeinWert) = 8 und translate(DeinWert, "0123456789", "9999999999") = "9999999999" ist.
PS: falls führende Nullen verboten sein sollen, noch prüfen, ob die erste Stelle keine Null ist.
cu,
Andreas
Hi,
Kann man mit xslt auf einfache Art herausfinden, ob ein bestimmter Wert (<xsl:value-of select="meinWert">) in der Form "12345678" (achtstellige, ganze Zahl) vorliegt?
Prüfen, ob string-length(DeinWert) = 8 und translate(DeinWert, "0123456789", "9999999999") = "9999999999" ist.
PS: falls führende Nullen verboten sein sollen, noch prüfen, ob die erste Stelle keine Null ist.
PPS: hinten nach dem "=" müssen es natürlich genau 8 Neuner sein, nicht 10 wie oben geschrieben.
Und damit kann man sich dann auch die Prüfung auf string-length schenken.
Nur evtl. eine führende Null muß zusätzlich geprüft werden, wenn die verboten sein soll.
cu,
Andreas