Intro in HTML5 Constraint Validation
Interactieve websites en applicaties kunnen niet worden voorgesteld zonder formulieren die ons daartoe in staat stellen contact maken met onze gebruikers, en naar verkrijg de gegevens we nodig hebben om soepele transacties met hen te beveiligen. We hebben het nodig geldige gebruikersinvoer, we moeten het echter op een manier verkrijgen frustreert niet onze gebruikers te veel.
Hoewel we de bruikbaarheid van onze formulieren met slim gekozen UX-ontwerppatronen kunnen verbeteren, heeft HTML5 ook een eigen mechanisme voor beperkingsvalidatie dat ons in staat stelt om vang invoerfouten direct in de front-end.
In deze post zullen we ons concentreren op door de browser geleverde beperkingsvalidatie, en kijk hoe frontend-ontwikkelaars kunnen werken beveiligde geldige gebruikersinvoer beveiligen met HTML5.
Waarom hebben we Front-End Input Validatie nodig?
Inputvalidatie heeft twee hoofddoelen. De inhoud die we krijgen, moet zijn:
1. Handig
Wij hebben nodig bruikbare gegevens waarmee we kunnen werken. We moeten mensen binnen laten komen realistische gegevens in het juiste formaat. Niemand die nu nog leeft, is bijvoorbeeld 200 jaar geleden geboren. Dergelijke gegevens kunnen in het begin misschien grappig lijken, maar op de lange termijn is het vervelend en bevolkt onze database met nutteloze gegevens.
2. Veilig
Als het om beveiliging gaat, betekent dit dat we dat moeten doen voorkomen dat er schadelijke inhoud wordt geïnjecteerd - of opzettelijk of per ongeluk.
Nut (redelijke gegevens verkrijgen) kan worden bereikt alleen aan de kant van de klant, het backend-team kan hier niet teveel aan doen. Te bereiken veiligheid, ontwikkelaars van voor- en achterkant moeten samenwerken.
Als ontwikkelaars van frontend de ingang van de client goed valideren, is de Het backend-team zal met veel minder kwetsbaarheden te maken krijgen. Hacking (een site) houdt vaak in extra gegevens indienen, of gegevens in het verkeerde formaat. Ontwikkelaars kunnen beveiligingsgaten zoals deze bevechten, met succes vechten vanaf de voorkant.
Deze PHP-beveiligingsgids raadt bijvoorbeeld aan om alles wat we kunnen aan de kant van de klant te controleren. Ze benadrukken het belang van frontend invoervalidatie door veel voorbeelden te geven, zoals:
"Inputvalidatie werkt het beste met extreem beperkte waarden, bijvoorbeeld wanneer iets een geheel getal of een alfanumerieke tekenreeks of HTTP-URL moet zijn."
In frontend invoervalidatie is het onze taak redelijke beperkingen opleggen op gebruikersinvoer. De beperkingsvalidatiefunctie van HTML5 biedt ons de middelen om dit te doen.
HTML5 Constraint-validatie
Vóór HTML5 waren frontend-ontwikkelaars beperkt tot het valideren van gebruikersinvoer met JavaScript, dat was een vervelend en foutgevoelig proces. Om de validering van de clientzijde te verbeteren, heeft HTML5 een a constraint validatie algoritme dat wordt uitgevoerd in moderne browsers, en controleert de geldigheid van de ingezonden input.
Om de evaluatie te maken, gebruikt het algoritme de validatie-gerelateerde attributen van invoerelementen, zoals ,
, en
. Als u wilt weten hoe constraint-validatie stap voor stap in de browser gebeurt, bekijk dan dit WhatWG-document.
Dankzij de beperkingsvalidatiefunctie van HTML5 kunnen we alles uitvoeren standaard invoervalidatietaken aan de kant van de klant zonder JavaScript, alleen met HTML5.
Voor het uitvoeren van complexere validatietaken, biedt HTML5 ons een Constraint Validation JavaScript API we kunnen gebruiken om onze aangepaste validatiescripts in te stellen.
Valideren met semantische invoertypen
HTML5 is geïntroduceerd semantische invoertypes dat - afgezien van het aangeven van de betekenis van het element voor gebruikersagenten - ook kan worden gebruikt voor valideren gebruikersinvoer door gebruikers te beperken tot een bepaald invoerformaat.
Naast de invoertypen die al bestonden vóór HTML5 (tekst
, wachtwoord
, voorleggen
, reset
, radio-
, checkbox
, knop
, verborgen
), we kunnen ook het volgende gebruiken semantische HTML5-invoertypen: e-mail
,tel
,url
,aantal
,tijd
,datum
,datum Tijd
,datetime-local
, maand
,week
, reeks
, zoeken
,kleur
.
We kunnen HTML5-invoertypen veilig gebruiken met oudere browsers, aangezien deze zich als een veld in browsers die ze niet ondersteunen.
Laten we eens kijken wat er gebeurt als de gebruiker het verkeerde invoertype invoert. Stel dat we een invoerveld voor e-mail hebben gemaakt met de volgende code:
Wanneer de gebruiker een tekenreeks typt die geen e-mailindeling gebruikt, wordt het beperkingsvalidatiealgoritme gebruikt verzendt het formulier niet, en geeft een foutmelding terug:
Dezelfde regel is ook van toepassing op andere invoertypen, bijvoorbeeld voor type = "URL"
gebruikers kunnen alleen een invoer indienen die het URL-formaat volgt (begint met een protocol, zoals http: //
of ftp: //
).
Sommige invoertypen gebruiken een ontwerp dat staat gebruikers zelfs niet toe om een verkeerd invoerformaat in te voeren, bijvoorbeeld kleur
en reeks
.
Als we de kleur
invoertype de gebruiker wordt beperkt tot het kiezen van een kleur uit de kleurkiezer of uit de standaardkleur zwart. Het invoerveld is beperkt door design, daarom laat het niet veel kans op gebruikersfouten.
Wanneer het passend is, is het de moeite waard om te overwegen het gebruik van de HTML-tag die op dezelfde manier werkt als deze ingesloten invoertypen; hiermee kunnen gebruikers kiezen uit een vervolgkeuzelijst.
Gebruik de Validation Attributes van HTML5
Het gebruik van semantische invoertypen stelt bepaalde beperkingen in aan wat gebruikers mogen indienen, maar in veel gevallen willen we een beetje verder gaan. Dit is wanneer het validatie gerelateerde attributen van de tag kan ons helpen.
Validatie-gerelateerde attributen behoren tot bepaalde invoertypen (ze kunnen niet worden gebruikt op allemaal typen) waarop zij verdere beperkingen stellen.
1. verplicht
voor het verkrijgen van een geldige invoer op alle mogelijke manieren
De verplicht
kenmerk is het meest bekende HTML-validatieattribuut. Het is een boolean-kenmerk wat betekent het heeft geen enkele waarde, we moeten het simpelweg in de label als we het willen gebruiken:
Als de gebruiker vergeet om een waarde in te voeren in een vereist invoerveld, de browser geeft een foutmelding terug die hen waarschuwt om het veld in te vullen, en zij kan het formulier niet verzenden totdat ze een geldige invoer hebben verstrekt. Daarom is het altijd belangrijk om te doen markeer visueel verplichte velden voor gebruikers.
De verplicht
attribuut kan zijn gebruikt samen met de volgende invoertypen: tekst
, zoeken
, url
, tel
, e-mail
, wachtwoord
, datum
, datum Tijd
, datetime-local
, maand
, week
,tijd
, aantal
, checkbox
, radio-
, het dossier
, plus met de en
HTML-tags.
2. min
, max
en stap
voor nummervalidatie
De min
, max
en stap
attributen stellen ons in staat om beperkingen stellen aan nummerinvoervelden. Ze kunnen samen met de. Worden gebruikt reeks
, aantal
, datum
, maand
, week
, datum Tijd
, datetime-local
, en tijd
invoertypes.
De min
en max
attributen bieden een geweldige manier om eenvoudig te zijn sluit onredelijke gegevens uit. Het onderstaande voorbeeld dwingt gebruikers bijvoorbeeld om een leeftijd tussen 18 en 120 in te dienen.
Wanneer het beperkingsvalidatiealgoritme een gebruikersinvoer tegenkomt die kleiner is dan de min
, of groter dan de max
waarde, voorkomt het dat het de backend bereikt en retourneert een foutbericht.
De stap
attribuut specificeert een numeriek interval tussen de wettelijke waarden van een numeriek invoerveld. Als we bijvoorbeeld willen dat gebruikers alleen kiezen uit schrikkeljaren, kunnen we het toevoegen stap = "4"
attribuut aan het veld. In het onderstaande voorbeeld gebruikte ik de aantal
invoertype, want er is geen type = "jaar"
in HTML5.
Met de vooraf ingestelde beperkingen kunnen gebruikers alleen kiezen tussen schrikkeljaren tussen 1972 en 2016 als ze de kleine pijl naar boven gebruiken die bij de aantal
invoertype. Ze kunnen ook handmatig een waarde in het invoerveld typen, maar in het geval dat het niet aan de beperkingen voldoet, zal de browser een foutmelding geven.
3. maximale lengte
voor validatie van de tekstlengte
De maximale lengte
kenmerk maakt het mogelijk om stel een maximale tekenlengte in voor tekstuele invoervelden. Het kan samen met de. Worden gebruikt tekst
, zoeken
, url
, tel
, e-mail
en wachtwoord
invoertypen en met de HTML-tag.
De maximale lengte
kenmerk kan een uitstekende oplossing zijn voor telefoonnummersvelden die niet meer dan een bepaald aantal tekens kunnen bevatten, of voor contactformulieren waarbij we niet willen dat gebruikers meer dan een bepaalde lengte schrijven.
Het codefragment hieronder toont een voorbeeld voor de laatste, het beperkt gebruikersberichten tot 500 tekens.
De maximale lengte
attribuut geeft geen foutmelding terug, maar de browser laat gebruikers simpelweg niet meer typen dan het opgegeven tekennummer. Dat is waarom het cruciaal is om informeer gebruikers over de beperking, anders zullen ze niet begrijpen waarom ze niet kunnen doorgaan met typen.
4. patroon
voor Regex-validatie
De patroon
kenmerk staat ons toe om gebruik reguliere expressies in ons inputvalidatieproces. Een reguliere expressie is een voorgedefinieerde set tekens die een bepaald patroon vormen. We kunnen het gebruiken om te zoeken naar reeksen die het patroon volgen, of om een bepaald formaat af te dwingen dat door het patroon wordt gedefinieerd.
Met de patroon
attribuut kunnen we dit doen - beperk gebruikers om hun input in een formaat in te dienen komt overeen met de gegeven reguliere expressie.
De patroon
kenmerk heeft veel gebruiksgevallen, maar het kan vooral nuttig zijn wanneer we dat willen valideer een wachtwoordveld.
In het onderstaande voorbeeld moeten gebruikers een wachtwoord invoeren dat minimaal 8 tekens lang is en dat ten minste één letter en één cijfer bevat (bron van de gebruikte regex).
Nog een paar dingen
In dit artikel hebben we gekeken hoe we gebruik kunnen maken van de Door de browser geleverde formuliervalidatie geleverd door het native validatie-algoritme voor constraint van HTML5. Voor het maken van onze aangepaste validatiescripts moeten we de Constraint Validation API gebruiken, wat een volgende stap kan zijn in het verfijnen van formuliervalidatievaardigheden.
HTML5-formulieren zijn toegankelijk via ondersteunende technologieën, dus we hoeven niet noodzakelijk de. Te gebruiken aria-vereiste
ARIA-kenmerk om vereiste invoervelden voor schermlezers te markeren. Het kan echter nog steeds nuttig zijn om toegankelijkheidsondersteuning toe te voegen voor oudere browsers. Het is ook mogelijk om opt-out van constraint-validatie door het toevoegen van de novalidate
boolean attribute to the element.