The filtering I introduced in r19983 was overly aggressive, and included
characters that weren't actually SIMILAR TO metacharacters. Instead, escape
each character, carefully going through the list of metacharacters listed at
http://www.postgresql.org/docs/8.4/interactive/functions-matching.html
Works for email addresses like "foo.bar+baz@example.com".
git-svn-id: svn://svn.open-ils.org/ILS/trunk@20085
dcc99617-32d9-48b4-a31d-
7c20da2025e4
sub _clean_regex_chars {
my ($search) = @_;
- $search =~ tr/\\.[]()?*+{}^$//d;
+ # Escape metacharacters for SIMILAR TO
+ # (http://www.postgresql.org/docs/8.4/interactive/functions-matching.html)
+ $search =~ s/\_/\\_/g;
+ $search =~ s/\%/\\%/g;
+ $search =~ s/\|/\\|/g;
+ $search =~ s/\*/\\*/g;
+ $search =~ s/\+/\\+/g;
+ $search =~ s/\[/\\[/g;
+ $search =~ s/\]/\\]/g;
+ $search =~ s/\(/\\(/g;
+ $search =~ s/\)/\\)/g;
+
return $search;
}