Smaakloze validatie php. Validatorklasse voor het valideren van POST-gegevens

met behulp van de POST-methode. En de eerste taak van de ontwikkelaar is validatie aangepast gegevens ontvangen via de POST-methode. Meestal komt deze validatie neer op:
  1. controleren of alle verplichte velden zijn ingevuld
  2. het controleren van de juistheid van het e-mailadres of eventuele URL-adres
  3. het controleren van de juistheid van andere gegevens(in het invoerveld kunt u alleen cijfers of letters invoeren, of beide, of de uniciteit van de login in de database controleren, enz.)
  4. gegevens uit kwaadaardige code filteren

In de regel worden al deze controles herhaald en moet je bijna dezelfde code schrijven om POST-gegevens te valideren, wat leidt tot duplicatie van php-code.

Om dit te voorkomen, heb ik een eenvoudige klasse geschreven POST-gegevensvalidatie in PHP. Deze klasse is heel eenvoudig en gemakkelijk te gebruiken, en u kunt deze in uw scripts gebruiken. Deze klasse heet Validator.

Ik zal meteen zeggen dat mijn klas als een bibliotheek is Formuliervalidatie V Codeontsteker , een klein beetje gewijzigd. Als u bekend bent met deze bibliotheek, zal het daarom niet moeilijk voor u zijn om mijn POST-gegevensvalidatieklasse te begrijpen.

Wat ik leuk vond aan de Form_validation-bibliotheek is het gemak waarmee velden voor validatie en de validatie zelf kunnen worden opgegeven. Voor mij was dit het startpunt bij het ontwikkelen van mijn validatieklas.

Laten we een klein voorbeeld bekijken van het gebruik van deze klasse

Require_once "validator.php"; $validator = nieuwe Validator(); $validator->set_rules("name","Uw naam",array("required" => "Het %s veld is verplicht","alpha" => "Het %s veld mag alleen letters bevatten ")); $validator->set_rules("email","Uw e-mailadres",array("required" => "Veld %s is verplicht","valid_email" => "Veld %s moet een geldig e-mailadres bevatten ")); if($validator->run())( echo "Validatie was succesvol"; ) else( echo $validator->get_string_errors(); )

Eerst nemen we het klassenbestand op validator.php naar ons schrift. Vervolgens maken we een instantie van de klasse en slaan we het object op in een variabele $validator .
Gebruik dan de methode $validator->set_rules($field, $label, $rules) stel de velden in voor validatie.

Deze methode heeft 3 parameters nodig:

  1. $veld — naam van het validatieveld (de waarde van het naamattribuut in de tag )
  2. $label — naam van het validatieveld, wordt ingevoegd in foutmeldingen
  3. $regels — een reeks validatieregels, waarbij de validatieregel als sleutel wordt gebruikt en de foutmelding voor deze regel als waarde wordt gebruikt

Nadat alle validatievelden zijn ingesteld, starten we de validator met behulp van de methode $validator->run() . Als de validatie succesvol was, retourneert deze methode de waarde WAAR , anders zal het terugkeren als er fouten zijn ONWAAR .

Er zijn drie methoden om foutmeldingen te ontvangen:

  1. get_string_errors() - retourneert alle foutmeldingen als een string
  2. get_array_errors() - retourneert alle berichten als een array, waarbij de veldnaam als sleutel wordt gebruikt en de foutbeschrijving voor dit veld als waarde wordt gebruikt.
  3. formulierfout($veld) — retourneert een foutmelding voor het veld dat is doorgegeven als de parameter $field

Foutmeldingen worden standaard in een tag verpakt . Gebruik de methode om uw ontwerp in te stellen set_error_delimiters($voorvoegsel, $achtervoegsel) . Bijvoorbeeld als volgt:

$validator->set_error_delimiters("

","
");

Nu zullen foutmeldingen veranderen in div met klasse "fout"

Zoals je kunt zien, is alles heel eenvoudig.

Om validatieregels in te stellen, kunt u de methode gebruiken set_rules($velden) passeer een multidimensionale associatieve array. Laten we eens kijken naar een voorbeeld:

$rules = array(array("field" => "naam", "label" => "Uw naam", "rules" => array("required" => "Veld %s is vereist", "alpha" = > "Veld %s mag alleen letters bevatten")), array("field" => "email", "label" => "Uw e-mailadres", "regels" => array("required" => "Veld % s is verplicht ", "valid_email" => "Het %s-veld moet een geldig e-mailadres bevatten "))); $validator->set_rules($regels);

Zoals je kunt zien, heb ik dezelfde validatieregels opgeschreven als in het eerste voorbeeld, alleen in de vorm van een multidimensionale associatieve array. U kunt elke methode gebruiken die in een bepaalde situatie het beste bij u past.

Welke validatieregels ondersteunt deze klasse?

Ik heb het meeste naar deze les gebracht gewoon validatieregels die iedereen tegenkomt. Hier is een volledige lijst van deze regels:

vereist Retourneert FALSE als het veld leeg is
geheel getal Retourneert FALSE als de waarde geen geheel getal is
vlot Retourneert FALSE als de waarde geen numerieke waarde is
geldige_url Retourneert FALSE als de waarde geen geldige URL is
geldig_e-mailadres Retourneert FALSE als de waarde geen geldig e-mailadres is
geldig_ip Retourneert FALSE als het IP-adres niet geldig is
wedstrijden Geeft FALSE terug als het element niet overeenkomt met de waarde van een ander veldelement
alfa Retourneert FALSE als het element meer dan alleen letters bevat
geldige_captcha Retourneert FALSE als de waarde zich in de sessie bevindt veld niet gelijk aan de formulierveldwaarde
geldige_datum Retourneert FALSE als het element een ongeldige datum bevat

De meeste van deze regels gebruiken filters, die beschikbaar kwam in PHP 5.

Hier in dit bericht gaan we zien hoe je een telefoonnummer in PHP kunt valideren. In veel situaties moeten webontwikkelaars het telefoonnummer valideren dat via een formulier wordt ingediend.

In deze gevallen moeten we dus bevestigen dat het ingediende telefoonnummer de geldige structuur of het geldige patroon heeft.

Telefoonnummervalidatie in PHP is geen moeilijke taak. We gaan het op een eenvoudige en gemakkelijke manier doen.

We weten allemaal dat een telefoonnummer over het algemeen uit 10 cijfers bestaat. Maar er kunnen zich veel uitzonderlijke situaties voordoen en om deze reden is het niet voldoende om alleen maar te controleren of het getal een geheel getal van 10 is.

Soms kan een gebruiker het nummer opgeven met de landcode of soms het “+” teken vóór de landcode. Het lijkt dus misschien een ingewikkelder taak om te valideren.

Maar maak je geen zorgen. Hier krijgt u de gebruiksklare PHP-functie die slechts een paar regels code bevat.

Hier in dit bericht laten we u de voorbeeldcode zien die onze taak zal uitvoeren.

We gaan een functie maken waarmee u een mobiel nummer kunt valideren. Hieronder staat de gegeven code van de functie:

Functie validate_phone_number($phone) ( // Toestaan ​​+, - en . in telefoonnummer $filtered_phone_number = filter_var($phone, FILTER_SANITIZE_NUMBER_INT); // Verwijder "-" uit nummer $phone_to_check = str_replace("-", "", $ filtered_phone_number); // Controleer de lengte van het nummer // Dit kan worden aangepast als u een telefoonnummer uit een specifiek land wilt if (strlen($phone_to_check)< 10 || strlen($phone_to_check) >14) ( retourneert false; ) else ( retourneert waar; ) )

De bovenstaande functie neemt het telefoonnummer als parameter. Binnen de functie hebben we alle illegale tekens uit het getal verwijderd, zodat het alleen “+”, “-” en “.” met behulp van het FILTER_SANITIZE_NUMBER_INT-filter. Het zal je misschien opvallen dat het telefoonnummer in veel gevallen in dit formaat kan worden geschreven: +91-523-452-5555. Daarom hebben we “+” en “-” in het telefoonnummer toegestaan.

Vervolgens hebben we “-” uit het telefoonnummer verwijderd met behulp van de PHP-functie str_replace.

Daarna hebben we de lengte gecontroleerd en retourneren we waar of onwaar, afhankelijk van de lengte. Het zal u misschien opvallen dat de lengte tussen 10 en 14 moet liggen. Dit komt omdat een getal over het algemeen uit 10 tekens bestaat en bij de landcode maximaal 14 kan zijn.

Hieronder ziet u het gebruik van de functie die we zojuist hebben gemaakt:

$telefoon = "+91-444-444-5555"; if (validate_phone_number($phone) == true) ( ​​echo "Telefoonnummer is geldig"; ) else ( echo "Ongeldig telefoonnummer"; )

De bovenstaande code retourneert 'Telefoonnummer is geldig' omdat deze waar retourneert. Als het onwaar zou zijn, zou het “Ongeldig telefoonnummer” retourneren.

Dus hoe was dat? We hebben zojuist de validatie van het mobiele nummer in PHP gezien.

Vond je dit bericht leuk? Laat het me weten als je verbetering wilt in de code om een ​​telefoonnummer te valideren met behulp van PHP.

Bijna alle interactieve webapplicaties moeten invoer valideren. Het registratieformulier vereist bijvoorbeeld waarschijnlijk een wachtwoord ter bevestiging. Misschien moet het e-mailadres uniek zijn. Antecedentenonderzoek kan een omslachtig proces zijn. Gelukkig niet in Laravel. De klasse Validator biedt een verbazingwekkende reeks validatiehulpmiddelen, waardoor gegevensvalidatie zo eenvoudig mogelijk wordt. Laten we eens kijken naar een voorbeeld:

Een data-array verkrijgen voor validatie:

$invoer = Invoer::all();

Regels voor gegevensvalidatie definiëren:

$rules = array("naam" => "vereist|max:50", "email" => "vereist|e-mail|unieke:gebruikers",);

Een Validator-instantie maken en de gegevens valideren:

$validation = Validator::make($input, $rules); if ($validation->fails()) ( return $validation->errors; )

Als er sprake is van een eigendom fouten u krijgt toegang tot een berichtenverzamelaar waarmee u eenvoudig uw eigen foutmeldingen kunt maken. Uiteraard hebben alle validatieregels standaard foutmeldingen. Standaard foutmeldingen zijn binnen taal/en/validatie.php.

U bent nu bekend met de basisregels voor het gebruik van de klasse Validator. U bent klaar om de regels te verkennen en te leren die worden gebruikt om uw gegevens te verifiëren!

Validatieregels

Verplichte gegevens

Controleren op een vereiste niet-lege parameterwaarde:

"naam" => "vereist"

Alfa, alfanumeriek en alfastreepje

Alleen op letters controleren:

"naam" => "alfa"

Controleren op alleen letters en cijfers:

"gebruikersnaam" => "alpha_num"

Controleer alleen op letters, cijfers, streepjes en onderstrepingstekens:

"gebruikersnaam" => "alpha_dash"

Maat

Controleren op de tekenreeksgrootte van een tekenreeksattribuut, of het bereik van waarden voor een numeriek attribuut:

"naam" => "maat:10"

Controleren op een bereik van waarden:

"betaling" => "tussen:10,50"

Opmerking: Het minimum en maximum zijn inbegrepen in het assortiment.

De minimale attribuutgrootte controleren:

"betaling" => "min:10"

De maximale attribuutgrootte controleren:

"betaling" => "max:50"

Numerieke typen

Controleren of een attribuut een numeriek type is:

"betaling" => "numeriek"

Controleren of een attribuut een integer-type is:

"betaling" => "geheel getal"

Voorvallen en uitsluitingen

Een attribuut controleren op opname in een array met waarden:

"grootte" => "in:klein,middelgroot,groot"

Een attribuut controleren op uitsluiting uit de reeks waarden:

"taal" => "not_in:cobol,assembler"

Bevestiging

Regel bevestigd controleert of er een corresponderende attribuut_bevestiging is voor een bepaald attribuut.

Het attribuut controleren ter bevestiging:

"wachtwoord" => "bevestigd"

In dit voorbeeld controleert de Validator of de parameter wachtwoord voldoet aan de voorwaarden wachtwoord_bevestiging uit de validatiearray.

Aanvaarding

Regel geaccepteerd controleert parameter op waarde Ja of 1 . Deze regel controleert of er verplichte selectievakjes zijn geïnstalleerd, zoals bijvoorbeeld het selectievakje 'Servicevoorwaarden'.

Acceptatiecontrole:

"termen" => "geaccepteerd"

Correspondenties en verschillen

Controleren of het attribuut hetzelfde is als het andere attribuut dat wordt vergeleken:

"token1" => "hetzelfde:token2"

Controleren of een attribuut een andere waarde heeft:

"wachtwoord" => "anders:oud_wachtwoord",

Reguliere expressies

Regel overeenkomst controleert of het attribuut overeenkomt met de reguliere expressie.

Controleren of de reguliere expressie voldoet:

"gebruikersnaam" => "match:/+/";

Uniciteit en bestaan

Een parameter controleren op uniciteit in de database:

"email" => "uniek:gebruikers"

In dit voorbeeld is de parameter e-mail gecontroleerd op uniciteit in de tabel gebruikers. Wilt u de uniciteit van een attribuut van een andere kolom dan deze controleren? Geen probleem:

Een andere kolom opgeven om te controleren:

"email" => "uniek:gebruikers,e-mailadres"

Vaak moet u bij het bijwerken van een record een unieke regel gebruiken, maar sluit u uit dat het record wordt bijgewerkt. U wilt bijvoorbeeld gebruikers toestaan ​​hun e-mailadres te wijzigen. Maar als de regel geldt uniek, moet u deze gebruiker overslaan om te voorkomen dat er een denkbeeldige validatiefout ontstaat. Het is eenvoudig:

De opgegeven ID negeren:

"email" => "uniek:gebruikers,e-mailadres,10"

Controleren op de aanwezigheid van een attribuut in de opgegeven database:

"state" => "bestaat:staten"

Een kolomnaam opgeven voor de bestaande regel:

"state" => "bestaat:states,afkorting"

Datums

Controleren of de datumparameter een waarde heeft vóór...:

"geboortedatum" => "vóór: 05-28-1986";

Controleren of de datumparameter een waarde heeft na...:

"geboortedatum" => "na: 05-28-1986";

Opmerking: Inspectie voor En na maakt gebruik van PHP-functie strtotijd.

E-mailadressen

Controleren of de parameter een e-mailadres is:

"adres" => "e-mail"

Opmerking: Deze regel maakt gebruik van de ingebouwde PHP-methode filter_var.

URL's

Controleren of de parameter een URL is:

"link" => "url"

Controleren of de parameter een actieve URL is:

"link" => "actieve_url"

Opmerking: Regel actieve_url gebruikt checkdnsr om te controleren of de URL actief is.

Downloads

Regels mimespelers controleer of het gedownloade bestand overeenkomt met het MIME-type. Deze regel gebruikt de PHP Fileinfo-extensie om de inhoud van het bestand te controleren en het type ervan te bepalen. Alle bestandsextensies die op deze regel van toepassing zijn, worden gedefinieerd in config/mimes.php.

Controleren of een bestand tot een bepaald type behoort:

"foto" => "mimespelers:jpg,gif"

Opmerking: Denk er bij het controleren aan dat u Input::file() of Input::all() gebruikt.

Controleren of het bestand een afbeelding is:

"afbeelding" => "afbeelding"

Controleren op bestandsgrootte:

"afbeelding" => "afbeelding|max:100"

Vraag een foutmelding aan

Met Laravel kunt u foutmeldingen afhandelen met behulp van een eenvoudige klasse, de errorcollector. Na het aanroepen van methoden gaat voorbij of mislukt Validator-instantie kunt u toegang krijgen tot de fout met behulp van de eigenschap fouten. De foutenverzamelaar beschikt over eenvoudige functies voor het opvragen van foutmeldingen:

Vaststellen dat een attribuut een foutmelding heeft:

if ($validation->errors->has("email")) ( // Het e-mailattribuut bevat fouten... )

Vraag het eerste foutbericht voor een attribuut op:

echo $validation->errors->first("e-mail");

Mogelijk moet u uw foutmelding in HTML-tags verpakken. Geen probleem. Wanneer u :message placeholder aanroept, specificeert u het formaat als de tweede parameter van de methode.

Opmaak van het foutbericht:

echo $validation->errors->first("e-mail", "");

Alle foutmeldingen voor een attribuut ophalen:

$messages = $validation->errors->get("e-mail");

Alle foutmeldingen voor een attribuut opmaken:

$messages = $validation->errors->get("e-mail", "");

Alle foutmeldingen voor alle attributen ophalen:

$messages = $validation->errors->all();

Alle foutmeldingen voor alle attributen opmaken:

$messages = $validation->errors->all("");

Validatie passeren

Nadat u uw validatie heeft uitgevoerd, heeft u een eenvoudige manier nodig om fouten in de weergave weer te geven. Laravel maakt het heel gemakkelijk. Laten we eens kijken naar een typisch scenario. Dit kan op twee manieren worden gedefinieerd:

Route::get("register", function() ( return View::make("user.register"); )); Route::post("register", function() ( $rules = array(...); $validation = Validator::make(Invoer::all(), $rules); if ($validation->fails( )) ( return Redirect::to("registreren")->with_errors($validation); ) ));

Geweldig! We hebben dus twee eenvoudige routes voor het registratieformulier. Eén voor de weergave van formulieren en één voor de invoer van formulieren. In de POST-route doen we enkele controles bij de ingang. Als de verificatie mislukt, sturen wij u terug naar het registratieformulier, waarbij fouten worden aangegeven en deze laatste in het formulier worden weergegeven.

Maar houd er rekening mee dat we fouten niet expliciet associëren met een doel in onze GET-route. De foutvariabele is echter wel beschikbaar in de weergave. Laravel detecteert op intelligente wijze of er fouten in de sessie voorkomen, en zo ja, voegt hij berichten toe aan de weergave. Als er geen fouten zijn, wordt de lege foutmeldingcontainer nog steeds aan de weergave gekoppeld. Er zal altijd een foutmeldingscontainer beschikbaar zijn in de weergave. Wij houden ervan om uw leven gemakkelijker te maken.

Aangepaste foutmeldingen

Wilt u uw eigen foutmelding gebruiken? Mogelijk wilt u zelfs aangepaste foutmeldingen gebruiken voor een bepaald attribuut en een bepaalde regel. Hoe dan ook, de klasse Validator maakt dit eenvoudig.

Een array van uw eigen foutmeldingen maken voor Validator:

$messages = array("required" => "Het:attribute-veld is verplicht.",); $validation = Validator::make(Invoer::get(), $rules, $messages);

Geweldig! Nu worden onze aangepaste berichten altijd gebruikt tijdens de verificatie. Maar wat voor uitdrukking :attribuut in ons bericht. Om uw leven gemakkelijker te maken, vervangt de klasse Validator :attribuut naar het attribuut waarvan de invoer de fout veroorzaakte. Het verwijdert zelfs het onderstrepingsteken van de attribuutnaam. Je kunt ook gebruiken :ander, :maat, : min, :max, En :waarden tijdelijke aanduidingen voor het samenstellen van uw foutmeldingen.

Voorbeelden van aangepaste foutmeldingen:

$messages = array("same" => "Het:attribute en:other moeten overeenkomen.", "size" => "Het:attribute moet exact:size zijn.", "between" => "Het:attribute moet zijn tussen:min - :max.", "in" => "Het:attribuut moet een van de volgende typen zijn: :values",);

Wat moet u doen als u een vereist bericht moet definiëren, maar alleen voor een e-mailkenmerk? Geen probleem. Geef gewoon het bericht op met behulp van attribuut_regel naamgeving:

Een bericht definiëren voor een specifiek attribuut:

$messages = array("email_required" => "We hebben uw e-mailadres nodig!",);

In dit voorbeeld wordt het aangepaste foutbericht alleen gebruikt voor het e-mailkenmerk, anders worden standaardberichten gebruikt.

Als u tegelijkertijd veel van uw eigen foutmeldingen gebruikt, kan het omslachtig en onhandig zijn om deze allemaal in de code op te geven. Om deze reden is het mogelijk om uw eigen array in het taalbestand te definiëren:

Uw eigen array aan het taalbestand toevoegen:

"custom" => array("email_required" => "We hebben uw e-mailadres nodig!",)

Eigen validatieregels

Laravel biedt een aantal krachtige validatieregels. U kunt echter uw eigen maken. Er zijn twee eenvoudige manieren om validatieregels te maken. Beide zijn betrouwbaar in gebruik. Het enige dat u hoeft te doen, is degene kiezen die het meest geschikt is voor uw project.

Uw eigen validatieregel registreren:

Validator::register("geweldig", function($attribute, $value, $parameters) ( return $value == "geweldig"; }); !}

In dit voorbeeld hebben we nieuwe validatieregels geregistreerd voor de klasse Validator. Deze regel heeft drie parameters nodig. De eerste is de naam van het attribuut dat wordt gecontroleerd, de tweede is de waarde van het attribuut dat wordt gecontroleerd, en de derde is een array van de parameters die voor de regel zijn ingesteld.

Zo ziet uw regelaanroep eruit:

$rules = array("gebruikersnaam" => "vereist|geweldig",);

Uiteraard moet u een foutmelding voor de nieuwe regel definiëren. U kunt dit doen in een reeks speciale berichten:

$messages = array("awesome" => "De attribuutwaarde moet geweldig zijn!",); $validator = Validator::make(Invoer::get(), $rules, $messages);

of door een vermelding voor de regel toe te voegen taal/en/validatie.php:

"awesome" => "De attribuutwaarde moet geweldig zijn!",

Zoals hierboven vermeld, kunt u zelfs een lijst met parameters opgeven en ophalen in een aangepaste regel:

// Bij het bouwen van een regel... $rules = array("username" => "required|awesome:yes",); // In de regel... Validator::register("awesome", function($attribute, $value, $parameters) ( return $value == $parameters; )

In dit voorbeeld ontvangt de argumentparameter van uw validatieregel een array met daarin één element: "yes".

Een andere manier om aangepaste validatieregels te maken en op te slaan, is door de klasse Validator uit te breiden. Bovendien kan deze klasse zichzelf dankzij naamruimten in Laravel uitbreiden. Door dit te doen, creëert u een nieuwe versie van de validator die alle eerder bestaande functies bevat, gecombineerd met nieuwe toevoegingen. U kunt er zelfs voor kiezen om enkele standaardmethoden te vervangen als u dat wilt. Laten we eens kijken naar een voorbeeld:

Maak eerst een klasse Validator die de klasse erft Laravel\Validator en plaats deze erin applicatie/bibliotheken:

Uw eigen klasse definiëren:

Laten we nu onze "geweldige" regel toevoegen en deze in een nieuwe klasse definiëren:

Een nieuwe regel toevoegen:

Merk op dat de methode validate_awesom een ​​naam krijgt volgens de naamgevingsconventie. Die. voor de "awesome"-regel moet de methode de naam "validate_awesome" hebben. Dit is een van de vele manieren om de klasse Validator uit te breiden. De klasse Validator vereist eenvoudigweg dat de waarde "true" of "false" wordt geretourneerd. Dat is alles!

Houd er rekening mee dat u nog steeds een aangepast bericht moet maken voor de validatieregels die u maakt. De methode om dit te doen is ook onafhankelijk van hoe u de regels definieert!

Het is zeer essentieel om de invoer van uw formulier te laten valideren voordat u de gegevens voor het indienen van het formulier voor verdere verwerking gebruikt. Als het formulier veel velden bevat, wordt het PHP-validatiescript te complex. Omdat u voor de meeste formulieren die u maakt dezelfde of vergelijkbare validatie uitvoert, wordt er bovendien te veel dubbele inspanning besteed aan formuliervalidaties.

Over dit generieke PHP-formuliervalidatiescript

Met dit generieke PHP-formuliervalidatorscript kunt u heel eenvoudig validaties aan uw formulier toevoegen.

We creëren en koppelen een set “validatiedescriptors” aan elk element in het formulier. De “validatiedescriptor” is een string die het type validatie specificeert dat moet worden uitgevoerd. “req” betekent bijvoorbeeld vereist, “alpha” betekent dat alleen alfabetische tekens zijn toegestaan, enzovoort.

Elk veld in het formulier kan nul, één of meer validaties hebben. De invoer mag bijvoorbeeld niet leeg zijn, mag niet langer zijn dan 25 tekens, moet alfanumeriek zijn, enz.

U kunt aan elk invoerveld in het formulier een set validatiedescriptors koppelen.

Download het PHP-formuliervalidatiescript

Hieronder kunt u het PHP-formuliervalidatiescript downloaden:
Het zip-bestand bevat het formuliervalidatiescript formvalidator.php, documentatie en gebruiksvoorbeelden.

Met behulp van het PHP-formuliervalidatiescript

  1. Neem formvalidator.php op in uw formulierverwerkingsscript
  2. require_once "formvalidator.php"
  3. Maak een FormValidator-object en voeg de formuliervalidatiedescriptors toe.
  4. $validator = nieuwe FormValidator(); $validator->addValidation("Naam", "req", "Vul de naam in"); $validator->addValidation("Email","email", "De invoer voor E-mail moet een geldige e-mailwaarde zijn"); $validator->addValidation("E-mail", "req", "Vul e-mailadres in");

    Het eerste argument is de naam van het invoerveld in het formulier. Het tweede argument is de validatiedescriptor die aangeeft welk type validatie vereist is. Het derde argument is de foutmelding die moet worden weergegeven als de validatie mislukt.

  5. Valideer het formulier door de functie ValidateForm() aan te roepen
  6. if(!$validator->ValidateForm()) ( echo " Validatiefouten:"; $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) ( echo "

    $inpnaam: $inp_err

    \N"; ) )

Voorbeeld

Het onderstaande voorbeeld maakt het idee duidelijker

addValidation("Naam", "req", "Vul de naam in");

$validator->addValidation("Email","email", "De invoer voor E-mail moet een geldige e-mailwaarde zijn");

$validator->addValidation("E-mail", "req", "Vul e-mailadres in"); Validatiefouten:"; $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) ( echo "

$inpnaam: $inp_err

if($validator->ValidateForm()) ( echo "

Validatie succes! "; $show_form=false; ) anders ( echo " ">

Naam:

E-mail:

  1. Indienen
  2. Aangepaste validatie toevoegen

  3. Als u een aangepaste validatie wilt toevoegen die niet wordt geleverd door de validatiedescriptors, kunt u dat doen. Hier zijn de stappen:
  4. $validator = nieuwe FormValidator(); $validator->addValidation("Naam", "req", "Vul de naam in"); $validator->addValidation("Email","email", "De invoer voor E-mail moet een geldige e-mailwaarde zijn"); $validator->addValidation("E-mail", "req", "Vul e-mailadres in"); $custom_validator = nieuwe MijnValidator(); $validator->AddCustomValidator($custom_validator);

De aangepaste validatiefunctie wordt automatisch aangeroepen na andere validaties.

Tabel met validatiedescriptoren

Hier is de lijst met alle validatiedescriptors:

ValidatiebeschrijvingGebruik
aanvrHet veld mag niet leeg zijn
maxlen=???controleert de lengte van de ingevoerde gegevens tot het maximum. Als de maximaal toegestane grootte bijvoorbeeld 25 is, geeft u de validatiedescriptor op als “maxlen=25”
minlen=???controleert de lengte van de ingevoerde string tot het vereiste minimum. voorbeeld “minlen=5”
alnumControleer de gegevens als deze andere tekens bevatten dan alfabetische of numerieke tekens
alnum_sAlleen alfabetische, numerieke en spatietekens toegestaan
numControleer numerieke gegevens
alfaControleer alfabetische gegevens.
alpha_sControleer alfabetische gegevens en laat spaties toe.
e-mailHet veld is een e-mailveld en verifieert de geldigheid van de gegevens.
Het=???
minder dan=???
Controleer of de gegevens kleiner zijn dan de doorgegeven waarde. Alleen geldig voor numerieke velden.
voorbeeld: als de waarde kleiner dan 1000 moet zijn, geef dan een validatiebeschrijving als “lt=1000”
gt=???
groter dan=???
Controleer of de gegevens groter zijn dan de doorgegeven waarde. Alleen geldig voor numerieke velden.
voorbeeld: als de waarde groter moet zijn dan 10, geef dan een validatiebeschrijving als “gt=10”
regexp=???Controleer met een reguliere expressie of de waarde overeenkomt met de reguliere expressie.
voorbeeld: “regexp=^(1.20)$” staat maximaal 20 alfabetische tekens toe.
niet selecteren=??Deze validatiedescriptor is voor geselecteerde invoeritems (lijsten). Normaal gesproken hebben de geselecteerde keuzelijsten één item met de tekst ‘Selecteer één’. De gebruiker moet een andere optie dan deze optie selecteren. Als de waarde van deze optie is ‘Select One’, de validatiebeschrijving moet ‘dontselect=Select One’ zijn
niet selecterenDeze validatiedescriptor is voor selectievakjes. De gebruiker mag het opgegeven selectievakje niet selecteren. Geef de waarde van het selectievakje in plaats van ??
Bijvoorbeeld: don'tselectchk=on
zou moetenselchkDeze validatiedescriptor is voor selectievakjes. De gebruiker moet het opgegeven selectievakje inschakelen. Geef de waarde van het selectievakje op in plaats van ??
Moetselchk=aan bijvoorbeeld
selecteer geen radioDeze validatiedescriptor is voor keuzerondjes. De gebruiker mag het gegeven keuzerondje niet selecteren. Geef de waarde van het keuzerondje op in plaats van ??
Bijvoorbeeld: don'tselectradio=NO
selecteer radioDeze validatiedescriptor is voor keuzerondjes. De gebruiker moet het gegeven keuzerondje selecteren. Geef de waarde van het keuzerondje op in plaats van ??
Selecteer bijvoorbeeld radio=ja
Selmin=??Selecteer ten minste n aantal selectievakjes uit een groep selectievakjes.
Bijvoorbeeld: selmin=3
alleenMaakt een radiogroep verplicht. De gebruiker moet minimaal één item uit de radiogroep selecteren.
eqelmnt=???vergelijk twee elementen in het formulier en zorg ervoor dat de waarden hetzelfde zijn. Bijvoorbeeld ‘wachtwoord’ en ‘wachtwoord bevestigen’. Vervang de ??? met de naam van het andere invoerelement.
Bijvoorbeeld: eqelmnt=confirm_pwd

Bij het maken van webapplicaties is het belangrijk om beveiliging serieus te nemen, vooral als je te maken hebt met het verkrijgen van gegevens van gebruikers.

Een algemene veiligheidsregel is om niemand te vertrouwen, dus u kunt er niet op vertrouwen dat gebruikers altijd de juiste waarden in formulieren invoeren. In plaats van het juiste e-mailadres in het veld in te voeren, kan de gebruiker bijvoorbeeld een onjuist adres of zelfs kwaadaardige gegevens invoeren.

Als het gaat om het valideren van gebruikersgegevens, kan dit aan de clientzijde (in de webbrowser) of aan de serverzijde worden gedaan.

Voorheen kon validatie aan de clientzijde alleen worden uitgevoerd met behulp van JavaScript. Maar alles is veranderd (of bijna veranderd), want met behulp van HTML5 kan validatie in de browser worden gedaan, zonder de noodzaak om complexe validatiescripts in JavaScript te schrijven.

Formuliervalidatie met HTML5

HTML5 biedt een redelijk robuust mechanisme op basis van de volgende tagkenmerken : type, patroon en vereiste. Met deze nieuwe kenmerken kunt u een deel van de naar de browser overbrengen.

Laten we naar deze kenmerken kijken om te begrijpen hoe ze kunnen helpen bij formuliervalidatie.

type attribuut

Dit attribuut geeft aan welk invoerveld moet worden weergegeven voor gegevensverwerking, bijvoorbeeld het bekende veld

Sommige invoervelden bieden al standaard validatiemethoden, zonder dat er extra code hoeft te worden geschreven. Bijvoorbeeld, controleert het veld om er zeker van te zijn dat de ingevoerde waarde overeenkomt met de sjabloon van een geldig e-mailadres. Als er een onjuist teken in een veld wordt ingevoerd, kan het formulier pas worden verzonden nadat de waarde is gecorrigeerd.

Probeer eens te spelen met de e-mailveldwaarden in de onderstaande demo.

Er zijn ook andere standaardveldtypen, zoals , En voor het valideren van respectievelijk nummers, URL's en telefoonnummers.

Opmerking: Telefoonnummerformaten variëren van land tot land vanwege verschillen in het aantal cijfers in telefoonnummers en verschillen in formaten. Als gevolg hiervan definieert de specificatie geen algoritme voor het controleren van telefoonnummers, waardoor deze functie op het moment van schrijven slecht wordt ondersteund door browsers.

Gelukkig voor ons kan telefoonnummervalidatie worden uitgevoerd met behulp van het patroonattribuut, dat een reguliere expressie als argument gebruikt, waar we hierna naar zullen kijken.

patroon attribuut

Het patroonattribuut zal waarschijnlijk veel front-end-ontwikkelaars doen springen van vreugde. Dit attribuut accepteert een reguliere expressie (vergelijkbaar met de reguliere expressie-indeling van JavaScript) die wordt gebruikt om de juistheid van de in het veld ingevoerde gegevens te controleren.

Reguliere expressies zijn een taal die wordt gebruikt om tekst te ontleden en te manipuleren. Ze worden vaak gebruikt voor complexe zoek- en vervangoperaties, maar ook voor het controleren van de juistheid van ingevoerde gegevens.

Tegenwoordig zijn reguliere expressies opgenomen in de meeste populaire programmeertalen, maar ook in veel scripttalen, editors, applicaties, databases en opdrachtregelhulpprogramma's.

Reguliere expressies (RegEX) zijn een krachtig, beknopt en flexibel hulpmiddel voor het matchen van tekstreeksen, zoals individuele tekens, woorden of tekenpatronen.

Door een reguliere expressie door te geven als de waarde van het patroonattribuut, kunt u opgeven welke waarden acceptabel zijn voor een bepaald invoerveld en kunt u de gebruiker informeren over fouten.

Laten we een paar voorbeelden bekijken van het gebruik van reguliere expressies om de waarde van invoervelden te valideren.

Telefoonnummers

Zoals eerder vermeld, wordt het tel-veldtype niet volledig ondersteund door browsers vanwege inconsistenties in telefoonnummerformaten in verschillende landen.

In sommige landen wordt het formaat voor telefoonnummers bijvoorbeeld weergegeven als xxxx-xxx-xxxx en zal het telefoonnummer zelf er ongeveer zo uitzien: 0803-555-8205 .

De reguliere expressie waarmee dit patroon overeenkomt is: ^\d(4)-\d(3)-\d(4)$ . In code kan dit als volgt geschreven worden:

Alfanumerieke waarden

vereist attribuut

Dit is een Booleaans attribuut dat wordt gebruikt om aan te geven dat de waarde van een bepaald veld moet worden ingevuld om het formulier te kunnen verzenden. Wanneer u dit kenmerk aan een veld toevoegt, vereist de browser dat de gebruiker dit veld invult voordat het formulier wordt verzonden.

Dit bespaart ons de implementatie van veldvalidatie met JavaScript, wat ontwikkelaars wat tijd kan besparen.

Bijvoorbeeld: of (voor XHTML-compatibiliteit)

Alle demo's die u hierboven heeft gezien, gebruiken het vereiste attribuut, dus u kunt het uitproberen door het formulier in te dienen zonder velden in te vullen.

Conclusie

Browserondersteuning voor formuliervalidatie is redelijk goed, en voor oudere browsers kun je polyfills gebruiken.

Het is de moeite waard om op te merken dat het gevaarlijk is om alleen op browser-side validatie te vertrouwen, omdat deze controles gemakkelijk kunnen worden omzeild door aanvallers of bots.

Niet alle browsers ondersteunen HTML5 en niet alle gegevens die naar uw script worden verzonden, komen uit uw formulier. Dit betekent dat voordat uiteindelijk gegevens van de gebruiker worden geaccepteerd, het noodzakelijk is om de juistheid ervan aan de serverzijde te controleren.