このシナリオでは、入力フィールドの入力として、次のリストされた文字のみを許可する必要があります
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/().,’+<>? -]+$
これにより、言及した文字のみが許可されます(1回以上)。