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 英数字エラー メッセージが表示されることがあります。デフォルト値と別の値を同時に表示するのはどうですか?..何かが正しくありません...