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


in reply to Re: Filtering unwanted chars from input field
in thread Filtering unwanted chars from input field

Instead of spliting and greping it might be simpler to use tr (see Quote and Quote like Operators).

$ perl -E ' > @data = ( > q{Hello, world!}, > q{te-st%$/*.}, > q{All_of_this_is_OK.}, > q{!@#$%^&*()12345}, > ); > say for map { tr{A-Za-z0-9_.}{}cd; $_ } @data;' Helloworld test. All_of_this_is_OK. 12345 $

I hope this is of interest.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^3: Filtering unwanted chars from input field
by Kenosis (Priest) on Dec 17, 2012 at 21:10 UTC

    Thank you, johngg. Not sure why I complicated it. Yours is, indeed, a more elegant and readable solution (++). Was brought back to this node after the following should-have-done-this-in-the-first-place solution occurred to me:

    $str =~ s/[^$acceptable]//gi;

    Edited my original comment to reflect this...

Re^3: Filtering unwanted chars from input field
by Anonymous Monk on Dec 18, 2012 at 14:01 UTC
    Would I be breaking the law by allowing a "-" and updating the code to:
    sub filter { my $str = shift; defined $str or return ''; $str =~tr{A-Za-z0-9_.-}{}cd; return $str; }

      That will work ok.

      $ perl -E ' > @data = ( > q{Hello, world!}, > q{te-st%$/*.}, > q{All_of_this_is_OK.}, > q{!@#$%^&*()12345}, > ); > say for map { tr{A-Za-z0-9_.-}{}cd; $_ } @data;' Helloworld te-st. All_of_this_is_OK. 12345 $

      Cheers,

      JohnGG

        What is I want to allow spaces as well? \s+ does not work.