http://qs321.pair.com?node_id=1165796


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;