http://www.perlmonks.org?node_id=1214586


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 } }
Ron