Grep并替换表单内容

时间:2012-05-14 15:53:01

标签: regex perl replace grep

致力于识别和调整表单内容条目。 我在提交表单时使用grep来消除数组中的值:

# Get the input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

# The following zaps entire value containing the item(s) grepped.
  @OrigArray = split(/&/, $buffer);
  @pairs = grep(!/kartridgeclub|bubba.org|\.ru/i, @OrigArray);

但我更愿意确定哪些不需要的字符序列 输入并且(无论输入哪一个),包括 一个条件语句,它将产生唯一的“返回页面” 如果提交了任何不需要的字符序列,则为文本。

我认为,我不能使用简单替换而不是grep 我需要替换包含不需要的字符的整个数组元素。

换句话说,用户输入一堆垃圾 - 总是包含-some.org-with-ru 扩展(或bubba.org等)到表单字段。我如何识别哪个 他输入的grep中的短语?然后,用我的短语替换它 选择(而不是仅仅从数组中删除它)并产生不同的 这个用户的“谢谢”页面?

感谢。

3 个答案:

答案 0 :(得分:1)

Cfreak的问题是务实的:使用CGI来处理表单的输入。使用CGI的param函数,检查表单的“不需要的字符序列”的参数,然后根据你发现的内容进行相应的更改和/或分支。例如:

use strict;
use warnings;
use CGI qw(:standard);
use 5.010;

my $input_field = param('input_field');

given(lc $input_field) {
    when(/kartridgeclub/) {
        print 'kartridgeclub';
        # do something else
    }
    when(/bubba\.org\b/) {
        print 'bubba.org';
        # do something else
    }
    when(/\.ru\b/) {
        print '.ru';
        # do something else
    }
    when(/this|that/) {
        print 'this or that';
        # do something else
    }
    default {
        print 'Your entry seems OK.';
        # do something else
    }
}

答案 1 :(得分:1)

虽然我完全同意其他帖子,你最好使用CGI,我认为这条线应该达到你想要的效果。

my %pairs = map { $_ => ($_ =~ /kartridgeclub|bubba.org|\.ru/i ? 'invalid' : 'valid')} @orig_array;

答案 2 :(得分:0)

只是不要使用grep。使用好的旧for循环并编写一些代码。

for my $i (0 .. $#OrigArray) {
    my $pair = $OrigArray[$i];
    if ($pair =~ m/whatever/) {
        # you're welcome to change $OrigArray[$i] here
    }
}