XSLT 1.0中如何查找字符串内的非字母数字字符
XSLT 1.0 提取字符串中非字母数字字符的实现方案
XSLT 1.0 没有内置正则相关函数,我们可以通过translate()函数配合白名单机制实现需求,核心思路是把所有合法的字母数字字符从原字符串中移除,剩下的就是需要提取的非字母数字字符。
具体实现步骤:
- 先定义字母数字白名单,包含大小写英文字母和0-9数字
- 调用
translate()方法,将原字符串中所有在白名单内的字符替换为空 - 输出剩余的字符,就是所有非字母数字内容
示例代码:
<!-- 定义合法字母数字白名单 --> <xsl:variable name="allowedAlnum" select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'" /> <!-- 测试用输入字符串 --> <xsl:variable name="testStr" select="'Hello&World'" /> <!-- 提取非字母数字字符的核心调用 --> <xsl:value-of select="translate($testStr, $allowedAlnum, '')" />
运行上述代码后,输出结果就是&,和示例需求一致。
补充说明:
- 如果需要允许中文、下划线等其他字符,直接把对应字符添加到
allowedAlnum白名单变量里即可 - 如果需要对返回的非字母数字字符去重,可以再加一层嵌套处理:
translate($nonAlnumResult, translate($nonAlnumResult, $nonAlnumResult, ''), ''),即可得到无重复的结果
内容的提问来源于stack exchange,提问作者Patty
相关产品推荐
相关产品推荐

