проверьте поле formmail - PullRequest
       7

проверьте поле formmail

0 голосов
/ 29 сентября 2010

Я пытаюсь изменить это:

foreach $require (@Required) {

        # If the required field is the email field, the syntax of the email  #
        # address if checked to make sure it passes a valid syntax.          #
        if ($require eq 'email' && !&check_email($Config{$require})) {
            push(@error,$require);
        }

//////////////////////////////////////////////////////////////////////////////////

sub check_email {
    # Initialize local email variable with input to subroutine.              #
    $email = $_[0];

    # If the e-mail address contains:                                        #
    if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||

        # the e-mail address contains an invalid syntax.  Or, if the         #
        # syntax does not match the following regular expression pattern     #
        # it fails basic syntax verification.                                #

        $email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/) {

        # Basic syntax requires:  one or more characters before the @ sign,  #
        # followed by an optional '[', then any number of letters, numbers,  #
        # dashes or periods (valid domain/IP characters) ending in a period  #
        # and then 2 or 3 letters (for domain suffixes) or 1 to 3 numbers    #
        # (for IP addresses).  An ending bracket is also allowed as it is    #
        # valid syntax to have an email address like: user@[255.255.255.0]   #

        # Return a false value, since the e-mail address did not pass valid  #
        # syntax.                                                            #
        return 0;
    }

    else {

        # Return a true value, e-mail verification passed.                   #
        return 1;
    }
}

в это:

foreach $require (@Required) {


            if ($require eq 'fieldb' && !&check_fieldb($Config{$require})) {
                push(@error,$require);
            }

    ///////////////////////////////////////////////////////////////////////////////

    sub check_fieldb {

        # If field b is under 20% of field a:                                        #
        if ($fieldb <=($fielda/100)*20 ) {

            # Return a false value, since field b is less than 20% of field a
            return 0;
        }

        else {

            # Return a true value, fieldb verification passed.                   #
            return 1;
        }
    }

но это не работает, всегда возвращается как 0. как бы это исправить?

1 Ответ

0 голосов
/ 29 сентября 2010

Невозможно убедиться, что не так, не зная значений $ fielda и $ fieldb.Мой диагноз состоит в том, что $fieldb меньше или равно ($fielda/100)*20

Вы передаете значение в check_fieldb, но никогда не используете его.Почему вы это передаете?Как заметил комментатор, вы должны передавать в функцию значения, которые вы хотите проверить.Гарантируется ли правильная инициализация $ fielda и $ fieldb перед вызовом check_fieldb?

Вы хотели сказать

foreach my $require (@Required){
    if($require eq 'fieldb' && !check_fieldb($value_of_fielda, $value_of_fieldb)){
        push(@error, $require);
    }
}

# ... later ...

sub check_fieldb($$){
    my $fielda = shift;
    my $fieldb = shift;

    return !($fieldb <=($fielda/100)*20);
}

возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...