xsd pattern not working with more than two regex separated by OR ( | ) -
i facing problem following xsd pattern ...
 <xsd:pattern value="\d+(,\d+)*(,[*])|\d+(,\d+)*|\d+(,[*])(,\d+)+" />   in above pattern want allow user enter following patterns only:
1,2,3 1,*,3 1,2,*   but when try enter 1,2,* gives me following exception ...
unknown exception occurred while updating = input string: "*"      
i not see wrong expression can improved , doing might prevent error. fault might in way results of regular expression used, not regular expression itself.
the regular expression given in question \d+(,\d+)*(,[*])|\d+(,\d+)*|\d+(,[*])(,\d+)+.
testing in notepad++ v6.5.5 shows matches 3 example lines, expression not anchored start , end of line. adding 1 ^ , 1 $ not sufficient because of precedence of |.
using expressions matches lines:
^(\d+(,\d+)*(,[*])|\d+(,\d+)*|\d+(,[*])(,\d+)+)$   could use ^\d+(,\d+)*(,[*])$|^\d+(,\d+)*$|^\d+(,[*])(,\d+)+$ seems harder read , understand.
within regular expression
- the 
[*]matches 1 character , might better written\*. - the 
(,[*])matches , captures 2 character sequence,*. there no point in capturing fixed in places. can replaced,\*throughout. - each alternative start 
\d+, factored out. - the first 2 alternatives differ final `(,[*]) clause.
 
making these changes gives expression:
^\d+((,\d+)*(,\*)*|,\*(,\d+)+)$   the question shows patterns 2 commas regular expression matches lines multiple commas allows second or final value replaced *. original expression matches
1,2,3 1,*,3 1,2,* 1,2,3,4,5 1,*,3,4,5 1,2,3,*,* 1,2,3,4,*   but not match
1,*,*,4,5 1,*,3,*,5 1,*,3,4,* 1,2,*,*,5 1,2,*,4,* 1,2,*,4,5 1,2,3,*,5   to match given inputs 2 commas use:
^\d+,(\d+,\d+|\d+,\*|\*,\d+)$   to match string many numbers separated commas 1 (but not first one) replaced * use:
^\d+(,\d+)*(,\*)?(,\d+)*$   note ? in line above. means match 0 or 1 occurrence of preceding item. allows ,* occur once in string.
Comments
Post a Comment