Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re^3: Creating a whitelist

by tangent (Vicar)
on Jun 15, 2016 at 21:30 UTC ( #1165796=note: print w/replies, xml ) Need Help??

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

The database has a list of words on each line like, First, National, Bank. If someone enters "National Bank" it triggers the error even though both words are on the list.
"National Bank" does not match "First, National, Bank" because of the comma. Try stripping out the commas:
$_ =~ s/,//g for @orgs;

Replies are listed 'Best First'.
Re^4: Creating a whitelist
by SimonPratt (Friar) on Jun 16, 2016 at 15:50 UTC
    "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?

      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;

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2022-05-24 18:55 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (84 votes). Check out past polls.