Regex 使用XSLT2.0删除非法字符
我需要对name字段执行验证,以查看它是否包含任何非法字符。 下面是马云目前的做法Regex 使用XSLT2.0删除非法字符,regex,xslt,Regex,Xslt,我需要对name字段执行验证,以查看它是否包含任何非法字符。 下面是马云目前的做法 <xsl:variable name="validChars" select="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. "></xsl:variable> <wd:First_Name> <xsl:variable name="illegalFirst" select="replace($getU
<xsl:variable name="validChars" select="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. "></xsl:variable>
<wd:First_Name>
<xsl:variable name="illegalFirst" select="replace($getUserData.firstname, $validChars, '')" />
<xsl:value-of select="replace($getUserData.firstname, $illegalFirst, '')"/>
</wd:First_Name>
第一个replace()捕获任何/所有非法字符,第二个replace()删除这些捕获的字符
我面临的问题是,“名字”不一定总是有一些非法字符。它也可以是有效的名称。在这种情况下,变量$illegalFirst将为空。这会引发错误“不允许将空序列作为replace()的第二个参数”
我尝试验证如下
<xsl:if test="string-length($illegalFirst) > 0">
<xsl:value-of select="replace($getUserData.firstname, $illegalFirst, '')"/>
</xsl:if>
<xsl:if test="string-length($illegalFirst) = 0">
<xsl:value-of select="$getUserData.firstname"/>
</xsl:if>
这种状况检查似乎不起作用。它仍然抛出相同的错误消息
我从早上开始就在拔头发。非常感谢您的帮助
谢谢,
Sam.您的XSL代码段中有一些错误,首先,您需要在此处用引号括起文字字符串:
<xsl:variable name="validChars" select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. '"></xsl:variable>
旁注:
translate()
函数适用于我,即使在没有发现非法字符的情况下(尽管我仅在XSLT 1.0中进行了测试)。您试图做的是一个XSLT 1.0习惯用法,它使用translate()
函数:
<xsl:variable name="validChars" select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. '"/>
<xsl:value-of select="translate($input-string, translate($input-string, $validChars, ''), '')"/>
请注意定义$validChars变量时使用的单引号
在XSLT 2.0中,您可以省去双重筛选,只需使用:
<xsl:value-of select="replace($input-string, '[^a-zA-Z. ]', '')"/>
<xsl:value-of select="replace($input-string, '[^a-zA-Z. ]', '')"/>