XForms/Case Validation
Motivation
You want to check to see if a field is upper or lower case.
Note: This does not seem to work in FireFox or XSLTForms.
Method
We will use a bind constraint.
<xf:bind nodeset="UpperCaseText" type="xs:string"
constraint="
. eq translate(., 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
"/>
Sample Source Code
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <head> <title>Case Test</title> <style type="text/css"> <![CDATA[ body { font-family: Helvetica, sans-serif; } ]]> </style> <xf:model> <xf:instance xmlns=""> <data> <LowerCaseText>abc</LowerCaseText> <UpperCaseText>ABC</UpperCaseText> </data> </xf:instance> <xf:bind nodeset="UpperCaseText" type="xs:string" constraint=" . eq translate(., 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') "/> <!-- compare the string to the lower-case version. If they are the same we pass --> <xf:bind nodeset="LowerCaseText" type="xs:string" constraint=" . eq translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') "/> </xf:model> </head> <body> <h1>Case Test</h1> <p>To pass this test the form must warn the user if they enter an invalid string. The XForms alert message must also be visible.</p> <xf:input ref="LowerCaseText" incremental="true"> <xf:label>Lower Case String:</xf:label> <xf:alert>The string must contain lowercase only.</xf:alert> </xf:input> <br/> <xf:input ref="UpperCaseText" incremental="true"> <xf:label>Upper Case String:</xf:label> <xf:alert>The string must contain uppercase only.</xf:alert> </xf:input> <br/> </body> </html>