Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: check if string is valid with special cases

by mr_ron (Chaplain)
on May 15, 2018 at 21:29 UTC ( #1214586=note: print w/replies, xml ) Need Help??

in reply to check if string is valid with special cases

Like most of the other answers I will recommend Text::CSV but with a hopefully helpful explanation. Your question is asking for comma separated fields but a field can also contain a comma (,) enclosed in quotes ("). What about a field that needs to have " characters in it as well? CSV has a standard way of handling all these issues and it is not so easy to do with one regex. What about a,b,c,"",e,f ? Again CSV will just handle it. The use of List::Util suggested by swl makes a good refinement but hopefully the example below is a start:
#!/usr/bin/env perl use Modern::Perl; use Text::CSV; my $csv = Text::CSV->new; my @strings = ( 'a,"b,c",3,4,5,6', 'a,"b,c",3,4,5', 'a,"b,c",3,4,5,""', 'abc,def,"ghi,jkl",,mno,6' ); foreach my $s (@strings) { if (my $status = $csv->parse($s)) { if ( (grep { /\w/ } $csv->fields) != 6 ) { warn "row failed: ", $csv->string } } else { warn $csv->error_input } }

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1214586]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2022-11-29 03:37 GMT
Find Nodes?
    Voting Booth?