function form_validate_machine_name

Form element validation handler for machine_name elements.

Note that #maxlength is validated by _form_validate() already.

Related topics

1 string reference to 'form_validate_machine_name'
system_element_info in modules/system/system.module
Implements hook_element_info().

File

includes/form.inc, line 3732

Code

function form_validate_machine_name(&$element, &$form_state) {
    // Verify that the machine name not only consists of replacement tokens.
    if (preg_match('@^' . $element['#machine_name']['replace'] . '+$@', $element['#value'])) {
        form_error($element, t('The machine-readable name must contain unique characters.'));
    }
    // Verify that the machine name contains no disallowed characters.
    if (preg_match('@' . $element['#machine_name']['replace_pattern'] . '@', $element['#value'])) {
        if (!isset($element['#machine_name']['error'])) {
            // Since a hyphen is the most common alternative replacement character,
            // a corresponding validation error message is supported here.
            if ($element['#machine_name']['replace'] == '-') {
                form_error($element, t('The machine-readable name must contain only lowercase letters, numbers, and hyphens.'));
            }
            else {
                form_error($element, t('The machine-readable name must contain only lowercase letters, numbers, and underscores.'));
            }
        }
        else {
            form_error($element, $element['#machine_name']['error']);
        }
    }
    // Verify that the machine name is unique.
    if ($element['#default_value'] !== $element['#value']) {
        $function = $element['#machine_name']['exists'];
        if ($function($element['#value'], $element, $form_state)) {
            form_error($element, t('The machine-readable name is already in use. It must be unique.'));
        }
    }
}

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