form-control-programmatic-label-present
Form controls must have a programmatic label
Checks that form controls have a programmatic label via <label>, aria-label, aria-labelledby, title, or placeholder.
Applies to. Applies to <input>, <select> and <textarea> elements included in the accessibility tree, excluding the input types hidden, submit, reset, button and image, which take their name from a value or alt attribute rather than from a label. A control carrying an explicit ARIA widget role is out of scope, button, checkbox, combobox, listbox, textbox, slider and the rest of ROLE_OWNED_ELSEWHERE each have a naming rule of their own, and role="presentation"/"none" removes a control unless it is still tabbable.
Expectation. Each applicable control carries a programmatic label by one of the mechanisms helpers.getLabelMethod resolves, in its priority order: an associated <label>, aria-labelledby, aria-label, title, then placeholder. Any of the five satisfies this rule. Whether the weaker two are an appropriate primary label is a separate question, asked by form-control-programmatic-label-quality.
Examples
<label for="email">Full name</label><input id="email" type="text">
The `<label for>` association gives the input a programmatic label.
<input type="text">
No `<label>`, `aria-label`, or `aria-labelledby` — nothing programmatic names the field.