XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Roel van der HoevenSubject: Matching problem in function
Author: Roel van der Hoeven
Date: 19 Oct 2011 05:31 AM
Hi,

I'm trying to write a simple function which strips a string from certain characters and then check if it has the correct format.
Code:

declare function local:checkContainerNumber($containerNumber as xs:string)
{
let $cleanContainerNumber := replace(replace(replace(replace(replace(replace(replace($containerNumber," ",""),"-",""),"/",""),"_",""),"\\",""),"\.",""),"\|","")
return
if(matches($cleanContainerNumber, "[A-Z]{4}[0-9]{7}"))
then
$cleanContainerNumber
else
error(xs:QName("Error"),concat(" Container number has wrong format, allowed format is 4 letters followed by 7 digits, IE: ABCD1234567, current: ",$containerNumber))
}
;

When I pass the string ABCD123456-7 to the function it strips the dash (-) and then returns the clean containernumber ABCD1234567. But whenever I feed an incorrect string (like ABCDE1234567777777) it returns that value in stead of throwing the error I defined.

Am I missing something here?

Postnext
Ivan PedruzziSubject: Matching problem in function
Author: Ivan Pedruzzi
Date: 19 Oct 2011 09:33 AM
Hi Roel,

The regular expression in XPath 2.0 requires the meta character ^ to indicate that you want to match the start of the string and $ to match the end of the string.
http://www.w3.org/TR/xpath-functions/#regex-syntax

If you need to replace a set of characters you could use translate
, it may be easier to read.

Hope this helps
Ivan Pedruzzi
Stylus Studio Team



declare function local:checkContainerNumber($containerNumber as xs:string)
{
let $cleanContainerNumber := translate($containerNumber, " -/_\.|", "")
return
if(matches($cleanContainerNumber, "^[A-Z]{4}[0-9]{7}$")) then
$cleanContainerNumber
else
error(xs:QName("Error"),concat(" Container number has wrong format, allowed format is 4 letters followed by 7 digits, IE: ABCD1234567, current: ",$containerNumber))
};

Posttop
Roel van der HoevenSubject: Matching problem in function
Author: Roel van der Hoeven
Date: 19 Oct 2011 09:36 AM
As always you've answered quickly and helped me alot ^^

As for the translate, I was just looking into an easier way to do multiple replaces, thx :)

 
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.