如何通过 xslt 屏蔽传入请求中的中间值
how can I mask the mid values in incoming request via xslt
如何通过 xslt 屏蔽传入请求中的中间值。例如,我的传入请求字段是
<CreditCardNumber>0123456789</CreditCardNumber>
输出应该是
<CreditCardNumber>012**56789</CreditCardNumber> .
我可以使用这个输出实现
<CreditCardNumber>012***56789</CreditCardNumber>
通过此代码
<xsl:value-of select="replace(.,substring(.,$length -6 , 2),'*')"/>
但问题是它只显示两个位置的一个掩码值,那么我们如何才能使其动态化?
假设"mid values"表示输入的第4个和第5个字符,你可以使用:
<xsl:value-of select="replace(input, '^(.{3}).{2}', '**')"/>
注:
使用substring()
来识别要屏蔽的输入部分是有问题的。
<xsl:value-of select="replace(input, substring(., string-length(.) - 6 , 2),'**')"/>
将return预期的012**56789
结果与给定的例子。
但是,当输入为 0123456349
时,结果将为 012**56**9
。
已添加:
如果你想让mask的start和length成为变量,那么你可以使用:
<xsl:value-of select="substring(input, 1, $start - 1)"/>
<xsl:value-of select="replace(substring(input, $start, $length), '.', '*')"/>
<xsl:value-of select="substring(input, $start + $length)"/>
在这种情况下,可能值得将其转换为 函数:
<xsl:function name="my:mask">
<xsl:param name="string" as="xs:string"/>
<xsl:param name="start" as="xs:integer"/>
<xsl:param name="length" as="xs:integer"/>
<xsl:variable name="char" select="'*'"/>
<xsl:value-of select="substring($string, 1, $start - 1)"/>
<xsl:value-of select="replace(substring($string, $start, $length), '.', $char)"/>
<xsl:value-of select="substring($string, $start + $length)"/>
</xsl:function>
演示:http://xsltransform.net/ncdD7mS/1
XSLT 1.0
要在 XSLT 1.0(使用合适的处理器,例如 DataPower)中完成这项工作,您可以使用:
<xsl:value-of select="substring(input, 1, $start - 1)"/>
<xsl:value-of select="str:padding($length, '*')"/>
<xsl:value-of select="substring(input, $start + $length)"/>
或者,在纯 XSLT 1.0 中(假设输入仅包含数字):
<xsl:value-of select="substring(input, 1, $start - 1)"/>
<xsl:value-of select="translate(substring(input, $start, $length), '0123456789', '**********')"/>
<xsl:value-of select="substring(input, $start + $length)"/>
如何通过 xslt 屏蔽传入请求中的中间值。例如,我的传入请求字段是
<CreditCardNumber>0123456789</CreditCardNumber>
输出应该是
<CreditCardNumber>012**56789</CreditCardNumber> .
我可以使用这个输出实现
<CreditCardNumber>012***56789</CreditCardNumber>
通过此代码
<xsl:value-of select="replace(.,substring(.,$length -6 , 2),'*')"/>
但问题是它只显示两个位置的一个掩码值,那么我们如何才能使其动态化?
假设"mid values"表示输入的第4个和第5个字符,你可以使用:
<xsl:value-of select="replace(input, '^(.{3}).{2}', '**')"/>
注:
使用substring()
来识别要屏蔽的输入部分是有问题的。
<xsl:value-of select="replace(input, substring(., string-length(.) - 6 , 2),'**')"/>
将return预期的012**56789
结果与给定的例子。
但是,当输入为 0123456349
时,结果将为 012**56**9
。
已添加:
如果你想让mask的start和length成为变量,那么你可以使用:
<xsl:value-of select="substring(input, 1, $start - 1)"/>
<xsl:value-of select="replace(substring(input, $start, $length), '.', '*')"/>
<xsl:value-of select="substring(input, $start + $length)"/>
在这种情况下,可能值得将其转换为 函数:
<xsl:function name="my:mask">
<xsl:param name="string" as="xs:string"/>
<xsl:param name="start" as="xs:integer"/>
<xsl:param name="length" as="xs:integer"/>
<xsl:variable name="char" select="'*'"/>
<xsl:value-of select="substring($string, 1, $start - 1)"/>
<xsl:value-of select="replace(substring($string, $start, $length), '.', $char)"/>
<xsl:value-of select="substring($string, $start + $length)"/>
</xsl:function>
演示:http://xsltransform.net/ncdD7mS/1
XSLT 1.0
要在 XSLT 1.0(使用合适的处理器,例如 DataPower)中完成这项工作,您可以使用:
<xsl:value-of select="substring(input, 1, $start - 1)"/>
<xsl:value-of select="str:padding($length, '*')"/>
<xsl:value-of select="substring(input, $start + $length)"/>
或者,在纯 XSLT 1.0 中(假设输入仅包含数字):
<xsl:value-of select="substring(input, 1, $start - 1)"/>
<xsl:value-of select="translate(substring(input, $start, $length), '0123456789', '**********')"/>
<xsl:value-of select="substring(input, $start + $length)"/>