Validating html controles
One of the features of HTML5 is the ability to validate most user data without relying on scripts.
When an element is valid: If you want to take control over the look and feel of native error messages, or if you want to deal with browsers that do not support HTML's built-in form validation, you must use Java Script.
A quick test for an explicit label is to click on the label’s text with your mouse and if focus goes into the input then they are connected.
This increases the click target size and really helps everyone click those tiny checkboxes and radio buttons. If you want to get useful data and not scare your users away then only require the least amount of fields as is necessary.
Placing the error in a label will cause a screen reader to speak each error as the user tabs through the form fields.
One of the biggest failures with forms is not sending keyboard focus to the field with an error or the list of error messages.
Assistive Technology users will have no idea there’s something wrong if the screen reader goes blank or their magnifier does not move focus to the error.