【问题标题】:Constraint on characters to allow in a input field of an Xform限制字符以允许在 Xform 的输入字段中
【发布时间】:2011-05-05 11:06:27
【问题描述】:

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

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

【问题讨论】:

    标签: xml regex xpath xforms orbeon


    【解决方案1】:

    在 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
    

    【讨论】:

    • @Vivek,因为我假设您想从 XForms 中使用它,您可以将 @Dimitre 提到的 XPath 表达式放在 &lt;xforms:bind contraint="..."/&gt; 中,并带有指向您的节点的 nodeset 属性想要验证。
    • @avernet:谢谢。不幸的是,我对 XForms 一无所知。
    【解决方案2】:

    我不具体了解您的正则表达式风格,但您可以使用类字符:

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2015-05-24
      • 2012-01-29
      相关资源
      最近更新 更多