Example 1

This is a test form. The test form input has an explicit label element and a SPAN with formatting instructions adjacent to the element. The formatting instructions will not be read by JAWS when in forms mode. JAWS only says "Date colon edit"

must be mm/dd/yyyy format

Example 2

This is a test form. The test form input has an explicit label element and is also labelled with the aria-labelledby attribute. The LABEL element will not be read by JAWS when in forms mode because aria-labelledby overrides the label. JAWS only says "Must be mm slash dd slash yyyy format edit"

must be mm/dd/yyyy format

Example 3

This is test form the same test form with a minor change. The test form input has a span element where the label previously was and is labelled with the aria-labelledby attribute. This form, and not the previous form, reads as intended because aria-labelledby overrides the label element. JAWS says "Date colon must be mm slash dd slash yyyy format edit"

Unfortunately, the SPAN element is not a valid label for screen readers which don't support ARIA.

Date: must be mm/dd/yyyy format

Example 4

This is the same test form with a minor change. The test form input has its label element back, this time using the ID value used in the span and is labelled with the aria-labelledby attribute. This form also reads as intended (again, reading "Date colon must be mm slash dd slash yyyy format edit")but it requires the extraneous addition of the 'id' attribute on the LABEL. Also, there's the fact that aria-labelledby is intended to point to label, not instructions.

must be mm/dd/yyyy format

Example 5

This test form input has its label element properly associated. The additional instructions are provided with the aria-describedby attribute. This is the preferred method of labelling and disclosing constraints. This usest he labels element properly and links to the formatting instructions via the aria-describedby attribute. JAWS says "Date colon edit. Must be mm slash dd slash yyyy format" (note the placement of the word 'edit' in this case)

must be mm/dd/yyyy format

Example 6

This is the same example as #5, with the addition of another DIV for an error message. The error message will not be read by JAWS. JAWS says "Date colon edit. Must be mm slash dd slash yyyy format edit"

Error: Please enter a valid date.
must be mm/dd/yyyy format

Example 7

This is the same example as #6, with the addition of an ID attribute on the error message. The error message will also be read by JAWS because we've included its id value in the aria-describedby attribute. JAWS says "Date colon edit. Error colon Please enter a valid date. Must be mm slash dd slash yyyy format edit"

Error: Please enter a valid date.
must be mm/dd/yyyy format