如何检查字符串是否只包含字符(XSLT文件)?
<xsl:variable name="IsValid1">
<xsl:choose>
<xsl:when test="string-length(//FirstName) > 0 and string-length(//LastName) > 0 and substring(//FirstName, 1, 3) != 'TST' and XXXX//FirtName only charactersXXXXX ">
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
答案 0 :(得分:4)
此XPath表达式:
string-length(translate($yourString, $allValidChars, '')) = 0
true()
中$yourString
中包含$allValidChars
中的所有字符时,
确切评估为false()
。
否则评估为matches($str,'^\p{L}+$')
。
<强> II。 XPath 2.0解决方案 - 更强大
只要“有效”字符或“无效字符”都没有方便紧凑的表达式,就可以使用XPath 2.0的RegEx功能。使用RegEx和字符类可以写出:
$str
仅当<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="s[matches(.,'^\p{L}+$')]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
完全由字母组成时才匹配<t>
<s>abcDПЖЗ</s>
<s>abcd</s>
<s>abcd123</s>
</t>
(所有unicode字符都是任何支持Unicode的字母表中的字母)。
这是一个基于XSLT 2.0的小型验证:
<s>abcDПЖЗ</s>
<s>abcd</s>
将此转换应用于以下XML文档时:
\p{L}
生成了想要的正确结果:
translate($s, translate($s, $alpha, ''), '')
<强>解释强>:
根据规范,{{1}}匹配任何字母。
与此问题相关:
在XPath 1.0中,如何从字符串中删除所有非字母字符?
这里的困难在于你不知道所有的非apha字符是什么。
该解决方案也被称为“双翻译方法”,首先由Michael Kay(@Michael Kay)展示:
{{1}}
答案 1 :(得分:3)
在XPath 1.0中,我建议使用此方法仅允许FirstName
<强>更新强>:
<xsl:variable name="not-allowed-characters">0123456789</xsl:variable>
<xsl:choose>
<xsl:when test="string-length(translate(//FirstName, $not-allowed-characters, '')) = string-length(//FirstName)">
<xsl:value-of select="true()"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="false()"/>
</xsl:otherwise>
</xsl:choose>
要扩展此功能,只需在not-allowed-characters
变量中添加不允许的字符。
旧版:
<xsl:variable name="not-allowed-characters">0123456789</xsl:variable>
<xsl:variable name="mock">$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$</xsl:variable>
<xsl:variable name="replacement">
<xsl:value-of select="substring($mock, 1, string-length($not-allowed-characters))"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="not(contains(translate(//FirstName, $not-allowed-characters, $replacement), '$'))">
<xsl:value-of select="true()"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="false()"/>
</xsl:otherwise>
</xsl:choose>
答案 2 :(得分:2)
在XPath 1.0(XSLT 1.0)中,您可以使用contains()
。在XPath 2.0(XSLT 2.0)中,您使用matches()
。
例如,您可能需要检查字母字符(没有数字,没有其他符号,没有空格):
matches(//FirstName, '^[a-zA-Z]+$')
或字母数字,
matches(//FirstName, '^[a-zA-Z0-9]+$')