2

在我们的场景中,我们只需要允许以下列出的字符作为输入字段的输入

     alpha/numeric
/  - Slash
-  - Hyphen
(  - Open parenthesis
)  - Close parenthesis
.  - Period
,  - Comma
’  - Single Quote
+  - Plus sign
< - Less Than
> - Greater Than
? - Question Mark
  - Space
4

2 回答 2

3

在 XPath 2.0 中,您可以matches()使用正则表达式参数来使用函数。

在 XPath 1.0 中使用

   string-length(translate(., $vallWantedChars, '')) = 0

仅当当前节点的字符串值不包含任何不需要的字符时,上述 XPath 表达式才为真。您需要$allunwantedChars用包含任何所需字符的字符串文字或表达式替换。

例如,它可以是:

concat($vAlpha, '0123456789', '/-().,+&lt;>? ', $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', '/-().,+&lt;>? ', $vApos)"/>

 <xsl:value-of select=
 "string-length(translate(., $vallWantedChars, '')) = 0"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<t>123^abc</t>

产生了想要的正确结果

false
于 2011-05-05T12:55:52.857 回答
0

我不具体知道你的正则表达式风格,但你可以使用一个类字符:

^[a-zA-Z0-9/().,’+<>? -]+$

这将只允许您提到的字符(一次或多次)。

于 2011-05-05T12:16:45.867 回答