Hi Elias,
I'm trying to validate a field that holds a file name to be stored in exist-db. I want to ensure only characters, numbers, space and . , _ - characters are allowed. I know I can use not(contains()) like this:

<xf:bind nodeset="instance('local')/FileName" type="xsd:string" required="true()"
constraint="not(contains(.,'!'))  and not(contains(.,'$'))"/>

but that means doing for every character not allowed. Is there a better way, like a regexp match?
XSLTForms is not yet supporting XPath 2.0 and the matches() is not implemented (I can add it quite easily actually...).

But, as a workaround, you can define a schema type for this. In the Test Suite, there is an example for a credit card number:

<html  
xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:my="http://commerce.example.com/payment"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:txs="http://www.agencexml.com/txs"xmlns="http://www.w3.org/1999/xhtml"xmlns:xhtml="http://www.w3.org/1999/xhtml";>
    <head>
        <title>2.3.a Example: Value Constraints</title>
        <link  rel="stylesheet"href="../driverPages/forms/TestSuite11.css  
<view-source:http://localhost/xsltforms/trunk/src/testsuite/w3c/1.1/tests/Edition1/driverPages/forms/TestSuite11.css>"type="text/css"/>
        <xforms:model>
            <xforms:instance>
                <my:payment  
xmlns="http://commerce.example.com/payment"method="cc";>
                    <my:number/>
                    <my:expiry/>
                </my:payment>
            </xforms:instance>
            <xforms:submission  id="submit01"method="post"action="../../../../../../echo.php  
<view-source:http://localhost/xsltforms/trunk/src/echo.php>"/>
            <xforms:bind  nodeset="/my:payment/my:number"relevant="/my:payment/@method = 
'cc'"required="/my:payment/@method='cc'"type="my:ccnumber"/>
            <xforms:bind  nodeset="/my:payment/my:expiry"relevant="/my:payment/@method = 
'cc'"required="/my:payment/@method='cc'"type="xsd:gYearMonth"/>
            <xsd:schema  targetNamespace="http://commerce.example.com/payment";>
                <xsd:simpleType  name="ccnumber">
                    <xsd:restriction  base="xsd:string">
                        <xsd:pattern  value="\d{14,18}"/>
                    </xsd:restriction>
                </xsd:simpleType>
                <xsd:element  name="payment">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element  
name="number"type="my:ccnumber"minOccurs="0"/>
                            <xsd:element  
name="expiry"type="xsd:gYearMonth"minOccurs="0"/>
                        </xsd:sequence>
                        <xsd:attribute  name="method"type="xsd:string"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:schema>
        </xforms:model>
    </head>
    <body>
        <xforms:group>
            <xforms:label  class="title">2.3.a Example: Value 
Constraints</xforms:label>
        </xforms:group>
        <xforms:group>
            <xforms:label>
                You must see a select1 control with the values "Cash" and 
"Credit" as well as two
                input controls on the page.
                The Credit Card Number and Expiration Date input controls are 
set to be relevant only when Credit
                is selected. If you have selected Cash then you must be able to 
submit the form
                and the input controls must have become unavailable.
            </xforms:label>
        </xforms:group>
        <xforms:group>
            <xforms:label>
                If you have selected Credit then you must not be able to submit 
the form until valid data is
                entered into both input controls. A valid entry for Credit Card 
Number is a positive number with
                14-18 digits. A valid entry for the expiration date
                is a date in the format of gYearMonth, which is yyyy-mm (ex. 
1998-12 for December 1998).
            </xforms:label>
        </xforms:group>
        <xforms:group>
                <xforms:label>
                        When you activate the Submit Now submit control this 
page must be replaced by the form data.
                                You must see the value "cc" and the values you 
entered in the Credit
                                Card Number and Expiration Date input controls 
if you had selected Credit or the
                value "cash" if you had selected Cash.
                </xforms:label>
        </xforms:group>
        <xforms:select1  ref="@method">
            <xforms:label>Select Payment Method:</xforms:label>
            <xforms:item>
                <xforms:label>Cash</xforms:label>
                <xforms:value>cash</xforms:value>
            </xforms:item>
            <xforms:item>
                <xforms:label>Credit</xforms:label>
                <xforms:value>cc</xforms:value>
            </xforms:item>
        </xforms:select1>
        <xforms:input  ref="my:number">
            <xforms:label>Credit Card Number:</xforms:label>
        </xforms:input>
        <xforms:input  ref="/my:payment/my:expiry">
            <xforms:label>Expiration Date:</xforms:label>
        </xforms:input>
        <xforms:submit  submission="submit01">
            <xforms:label>Submit Now</xforms:label>
        </xforms:submit>
    </body>
</html>

Thank you for your feedbacks!

-Alain
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Xsltforms-support mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xsltforms-support

Reply via email to