2

OK、すべてを調べて、入力をトリミングしようとしました。しかし、私が何をしても、私の switch ステートメントは default ステートメントにデフォルト設定され続けます。しかし、alphanum の結果が FALSE の場合、そのエラー メッセージはデフォルトのエラー メッセージと同じように表示されます。それらの両方を表示することになります..通常、CASEステートメントは1つの結果にすぎないため、意味がありません...

なぜこれが起こっているのか誰にも教えてもらえますか?

function match_pattern($str, $pattern) {
        $pattern = trim($pattern);
        switch($pattern) {
            case 'alphanum':
                if( ! preg_match('/^[A-Za-z0-9]{1,}$/', $str))
                {
                    //error message must be same as function name
                    $this->set_message('match_pattern', 'The %s field must only contain alpha-characters or numbers!');
                    return false;  //failed
                }
                break;
            case 'numeric':
                if( ! preg_match('/^[0-9]{,}%/', $str)) {
                    $this->set_message('match_pattern', 'The %s field must only contain numeric characters!');
                    return false; //failed
                }
                break;
            default:
                $this->set_message('match_pattern', 'Invalid pattern');
                return false;
        }
        return true;  //passed
    }

次に、それを呼び出しているのは次のとおりです。

$this->form_validation->set_rules('username', 'Username', 'required|match_pattern[alphanum]|min_length[3]|max_length[25]|is_unique[user.username]');

はい、これは CodeIgniter です。英数字が false (この場合は true) になると、エラー メッセージが表示されます。ただし、「lilmousiee」と入力すると、preg_match 式が渡されるため、エラー メッセージは表示されません。しかし、何を入力しても、常に「無効なパターン」エラーメッセージが表示されます。「lilmousiee 6」と入力すると、スペースが許可されていないため、AND 英数字エラー メッセージが表示されることがあります。デフォルト値と別の値を同時に表示するのはどうですか?..何かが正しくありません...

4

1 に答える 1

0

@femtoRgonは正しかった!match_pattern[alpha_num_space] がありましたが、そのための case ステートメントがなかったため、デフォルトでもありました! したがって、時々2つのエラーメッセージが表示される理由です!

ありがとうございました!

于 2012-12-14T00:13:40.520 に答える