function number_field_widget_validate

FAPI validation of an individual number element.

1 string reference to 'number_field_widget_validate'
number_field_widget_form in modules/field/modules/number/number.module
Implements hook_field_widget_form().

File

modules/field/modules/number/number.module, line 379

Code

function number_field_widget_validate($element, &$form_state) {
    $field = field_widget_field($element, $form_state);
    $instance = field_widget_instance($element, $form_state);
    $type = $element['#number_type'];
    $value = $element['#value'];
    // Reject invalid characters.
    if (!empty($value)) {
        switch ($type) {
            case 'float':
            case 'decimal':
                $regexp = '@([^-0-9\\' . $field['settings']['decimal_separator'] . '])|(.-)@';
                $message = t('Only numbers and the decimal separator (@separator) allowed in %field.', array(
                    '%field' => $instance['label'],
                    '@separator' => $field['settings']['decimal_separator'],
                ));
                break;
            case 'integer':
                $regexp = '@([^-0-9])|(.-)@';
                $message = t('Only numbers are allowed in %field.', array(
                    '%field' => $instance['label'],
                ));
                break;
        }
        if ($value != preg_replace($regexp, '', $value)) {
            form_error($element, $message);
        }
        else {
            if ($type == 'decimal' || $type == 'float') {
                // Verify that only one decimal separator exists in the field.
                if (substr_count($value, $field['settings']['decimal_separator']) > 1) {
                    $message = t('%field: There should only be one decimal separator (@separator).', array(
                        '%field' => t($instance['label']),
                        '@separator' => $field['settings']['decimal_separator'],
                    ));
                    form_error($element, $message);
                }
                else {
                    // Substitute the decimal separator; things should be fine.
                    $value = strtr($value, $field['settings']['decimal_separator'], '.');
                }
            }
            form_set_value($element, $value, $form_state);
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.