Ограничение на символы, чтобы разрешить в поле ввода Xform - PullRequest
2 голосов
/ 05 мая 2011

В нашем сценарии нам нужно разрешить только следующие перечисленные символы в качестве ввода для поля ввода

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

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

В 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
0 голосов
/ 05 мая 2011

Я не знаю конкретно вашего вкуса регулярного выражения, но вы можете использовать символ класса:

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

Это позволит использовать только те символы, которые вы упомянули (один или несколько раз).

...