我想编写一个XSLT函数,它应该替换除下面的所有字符:
0-9A-Za-z_ * & . , #
所以,我在下面的函数中写了一个正则表达式模式:
<xsl:function name="wd:allowed_characters">
<xsl:param name="input_param" />
<xsl:if test="$input_param !=' '" >
<xsl:value-of select="normalize-space(replace($input_param,'^[a-zA-Z0-9_ * & . , #]',''))" />
</xsl:if>
</xsl:function>
看起来,Not运算符(^)不能像其他语言一样工作。 你能告诉我我在哪里做错了吗?我怎样才能在这里实现目标?
正确的功能如下:
<xsl:function name="wd:allowed_characters">
<xsl:param name="input_param" />
<xsl:if test="$input_param !=' '" >
<xsl:value-of select="normalize-space(replace($input_param,'[^.#, \- _ * a-zA-Z0-9]',''))" />
</xsl:if>
</xsl:function>
答案 0 :(得分:0)
将^
放在方括号replace($input_param,'[^a-zA-Z0-9_ * & . , #]','')
内,但您也可以使用translate($input_param, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9_ * & . , #', '')
。