Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^4: Creating a whitelist

by SimonPratt (Friar)
on Jun 16, 2016 at 15:50 UTC ( [id://1165869]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Creating a whitelist
in thread Creating a whitelist

"National Bank" does not match "First, National, Bank" because of the comma. Try stripping out the commas:

That still wouldn't match, because "National Bank" !~ /First National Bank/i;. Reversing the match would work in that instance, eg "First National Bank" =~ /National Bank/i;

I'm curious as to why OP doesn't provide a list of allowed values that users can select from?

Replies are listed 'Best First'.
Re^5: Creating a whitelist
by htmanning (Friar) on Jun 17, 2016 at 00:08 UTC
    Okay Monks,

    I'm still working on this. I thought I had it working, but this just doesn't work. The following sub looks right to me, but the "if" statement is not triggered.

    sub filter_good_orgs { print "Content-type: text/html\n\n"; $SQL7 = "SELECT * FROM badwords"; &Do_SQL7; $pointer7 = $sth7->fetchrow_hashref; $goodorg = $pointer7->{'goodorgs'}; $lc_org = lc($organization); @orgs = split /\n/,$goodorg; foreach $goodorg (@orgs) { print "Word: $goodorg, Org: $lc_org Found: $found<br>"; if ($lc_org =~ /$goodorg/i) { $found = 1; } } print "<br>Found: $found<br>"; if (!$found) { &error_suspect_org; } return; } # end filter_good_orgs subroutine
    Good org words are listing in the database, one per line:
    first national bank
    The above code returns the following when the organization is First National Bank:
    Word: first , Org: first national bank Found: Word: national , Org: first national bank Found: Word: bank , Org: first national bank Found: Found: Content-type: text/html
    Even if I switch the "if" statement around, it doesn't work.
    if ($goodorg =~ /$lc_org/i) { $found = 1; }
      Alright, I finally got it to work (I think) by placing this inside the foreach loop.
      $goodorg =~ s/\n//g; $goodorg =~ s/\r//g;

        Hi htmanning,

        Sounds like the list in the DB is separated by CRLF (Windows style) instead of just LF (*NIX style). Two other ways you could fix it are by writing your split as split /\r?\n/, $goodorg; (handles CRLF and LF), and/or by trimming whitespace off each string via $goodorg=~s/^\s+|\s+$//g;.

        I find the fastest way to see problems like this is by using Data::Dumper with its Useqq option:

        use Data::Dumper; $Data::Dumper::Useqq=1; print Dumper($goodorg); __END__ $VAR1 = "Company\r\nLLC\r\n";

        Hope this helps,
        -- Hauke D

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2024-03-29 01:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found