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
Conferences Close Tree View
+ Stylus Studio Feature Requests (1168)
- Stylus Studio Technical Forum (14425)
-> + problem with Stylus X15 XML RE... (2)
-> + Cannot remove a row into a tab... (3)
-> + prevent the meta data from bei... (3)
-> + Unable to auto detect JRE in X... (2)
-> - Unable to auto detect JRE in X... (1)
-> - where to find information (1)
-> + X16 - XPath 3.0, XQuery 3.0, X... (2)
-> - Test (1)
-> + XSLT debugger shows [symbol u... (3)
-> - How do i use *.conv to process... (1)
-> - How do i use *.conv to process... (1)
-> + Not able to configure JVM in ... (5)
-> + Converting Cobol flat file to ... (2)
-> + Problem with uninstall - Windo... (2)
-> + Function current() is not reco... (6)
-> + API or web version (2)
-> + How to use Saxon for X16 on WI... (9)
-> + Error in SS X14 syntax highlig... (2)
-> + Option not available (2)
-> + XML Diff functionality and sor... (3)
-- [1-20] [21-40] [41-60] Next
+ Website Feedback (244)
+ XSLT Help and Discussion (7593)
+ XQuery Help and Discussion (1941)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (363)
+ Stylus Studio Announcements (113)
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 :)

   
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.