2011-11-10 1 views
0

私は、次のものとおおよそ類似していますが、まったく同じことをしたいと思います。SSNフィールドを持つPersonコンテンツタイプを作成したいと思います。私は整数としてSSNフィールドを保存したいと思いますが、ユーザーが123-45-6789として数値を入力できるようにします。これは、検証トリガの前に、 "123-45-6789"が無効な入力であることを示すために、ダッシュを削除して整数として扱いたいと考えています。Drupal 7では、値が検証される前に、送信されたフォームの内容を変更する方法はありますか?

私は#value_callback関数とデフォルト以外の検証関数の両方を使用しようとしました。問題は、値を強制的に検証することはできますが、変更されていない値は挿入に失敗したdbに渡される値です。たとえば、私は "1233-45-6789"をDrupalに "123456789"と認識させることができますが、データベースはまだ "123-45-6789"になりますが、これは失敗します。

明白な解決策の1つは、値がWebサーバーに送信される前に、クライアント側のjavascriptを使用してこれを変更することです。私はこのルートを避けることを強く望みます。

答えて

3

謝罪私が誤解しましたが、あなたはちょうどこのような何かを行うことができるようにしたい場合:

function my_validation_handler(&$form, &$form_state) { 
    if (passes_ssn_validation($form_state['values']['SSN'])) { 
    // Changing the value in $form_state here will carry on over to the submission function 
    $form_state['values']['SSN'] = convert_to_db_format($form_state['values']['SSN']); 
    } 
    else { 
    form_set_error('SSN', 'The SSN was invalid'); 
    } 
} 

次に、あなたは、フォームの構築やform_alter機能のいずれかで$form['#validate'][] = 'my_validation_handler'を使用して、その検証機能を付けると思います。

関連する問題