|
next
|
Subject: 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?
|
next
|
Subject: 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))
};
|
|
|
|