The condition is that any number of product codes must exist on a line
separated a space. It may or may not start or end with spaces. The
product code is a 10 digit number.
Example Valid Input:
"1234567890 0987654321 5678901234"
Current Expression:
/^[ ]?([\d]{10}[ ])*?([\d]{10})[ ]?$/
This expression seems to validate well enough but, it only matches the
last two occurrences.
Any suggestions?
Capture buffers with a quantifier (/(...)*/) only capture the last
occurrence. To get all of them you have to use the /g flags and match in
list context, but in this case it would be easier to use something like
my $input = '1234567890 0987654321 5678901234';
my @codes = split ' ', $input;
for (@codes) {
/\D/ and die "non-numeric code: '$_'";
length == 10 or die "bad code length: '$_'";
}
Ben
Your right,
I got sucked into the vortex of making something more complex (and
more interesting) then it needed to be.
Thanks the reality check.
$ perl -le'
for ( " 1234567890 0987654321 5678901234 ", " 1234567890 ", " ", " 12345
" ) {
$count = @matches = / (?<=\A| ) \d{10} (?= |\z) /xg;
print qq["$_" ], $count ? "matched @matches." : "did not match.";
}
'
" 1234567890 0987654321 5678901234 " matched 1234567890 0987654321
5678901234.
" 1234567890 " matched 1234567890.
" " did not match.
" 12345 " did not match.
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall