在我们的场景中,我们只需要允许以下列出的字符作为输入字段的输入
alpha/numeric
/ - Slash
- - Hyphen
( - Open parenthesis
) - Close parenthesis
. - Period
, - Comma
’ - Single Quote
+ - Plus sign
< - Less Than
> - Greater Than
? - Question Mark
- Space
在 XPath 2.0 中,您可以matches()
使用正则表达式参数来使用函数。
在 XPath 1.0 中使用:
string-length(translate(., $vallWantedChars, '')) = 0
仅当当前节点的字符串值不包含任何不需要的字符时,上述 XPath 表达式才为真。您需要$allunwantedChars
用包含任何所需字符的字符串文字或表达式替换。
例如,它可以是:
concat($vAlpha, '0123456789', '/-().,+<>? ', $vApos)
下面是 XSLT 中的说明(解决方案仍然完全是 XPath 1.0,但在这种情况下 XPath 处理器的宿主语言是 XSLT 1.0):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="vAlpha" select=
"'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="vApos">'</xsl:variable>
<xsl:template match="/">
<xsl:variable name="vallWantedChars" select=
"concat($vAlpha, '0123456789', '/-().,+<>? ', $vApos)"/>
<xsl:value-of select=
"string-length(translate(., $vallWantedChars, '')) = 0"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下 XML 文档时:
<t>123^abc</t>
产生了想要的正确结果:
false
我不具体知道你的正则表达式风格,但你可以使用一个类字符:
^[a-zA-Z0-9/().,’+<>? -]+$
这将只允许您提到的字符(一次或多次)。