Validierer

Es gibt viele Validierer, die direkt in Composer verwendet werden können, zum Beispiel:

top-think/think-validate

respect/validation

Validator top-think/think-validate

Beschreibung

Offizieller Validator von ThinkPHP

Projektadresse

https://github.com/top-think/think-validate

Installation

composer require topthink/think-validate

Schnellstart

Erstellen Sie app/index/validate/User.php

<?php
namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];

    protected $message  =   [
        'name.require' => 'Name ist erforderlich',
        'name.max'     => 'Name darf maximal 25 Zeichen lang sein',
        'age.number'   => 'Alter muss eine Zahl sein',
        'age.between'  => 'Alter muss zwischen 1 und 120 liegen',
        'email'        => 'Ungültiges E-Mail-Format',    
    ];

}

Verwendung

$data = [
    'name'  => 'thinkphp',
    'email' => 'thinkphp@qq.com',
];

$validate = new \app\index\validate\User;

if (!$validate->check($data)) {
    var_dump($validate->getError());
}

Validator workerman/validation

Beschreibung

Projekt ist die chinesischsprachige Version von https://github.com/Respect/Validation

Projektadresse

https://github.com/walkor/validation

Installation

composer require workerman/validation

Schnellstart

<?php
namespace app\controller;

use support\Request;
use Respect\Validation\Validator as v;
use support\Db;

class IndexController
{
    public function index(Request $request)
    {
        $data = v::input($request->post(), [
            'nickname' => v::length(1, 64)->setName('Spitzname'),
            'username' => v::alnum()->length(5, 64)->setName('Benutzername'),
            'password' => v::length(5, 64)->setName('Passwort')
        ]);
        Db::table('user')->insert($data);
        return json(['code' => 0, 'msg' => 'ok']);
    }
}  

Über jquery zugreifen

$.ajax({
    url : 'http://127.0.0.1:8787',
    type : "post",
    dataType:'json',
    data : {nickname:'Tom', username:'tom cat', password: '123456'}
});

Ergebnis erhalten:

{"code":500,"msg":"Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten"}

Erklärung:

v::input(array $input, array $rules) wird verwendet, um Daten zu validieren und zu sammeln. Wenn die Datenvalidierung fehlschlägt, wird eine Ausnahme Respect\Validation\Exceptions\ValidationException geworfen. Bei erfolgreicher Validierung werden die validierten Daten (Array) zurückgegeben.

Wenn der Geschäftscode die Validierungsausnahme nicht abfängt, fängt das Webman-Framework automatisch die Ausnahme ab und gibt basierend auf dem HTTP-Anforderungsheader JSON-Daten zurück (ähnlich wie {"code":500, "msg":"xxx"}) oder eine normale Fehlerseite. Wenn das Rückgabeformat nicht den Geschäftsanforderungen entspricht, kann der Entwickler die Ausnahme ValidationException selbst abfangen und die benötigten Daten zurückgeben, ähnlich wie im folgenden Beispiel:

<?php
namespace app\controller;

use support\Request;
use Respect\Validation\Validator as v;
use Respect\Validation\Exceptions\ValidationException;

class IndexController
{
    public function index(Request $request)
    {
        try {
            $data = v::input($request->post(), [
                'username' => v::alnum()->length(5, 64)->setName('Benutzername'),
                'password' => v::length(5, 64)->setName('Passwort')
            ]);
        } catch (ValidationException $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()]);
        }
        return json(['code' => 0, 'msg' => 'ok', 'data' => $data]);
    }
}

Validator Funktionsleitfaden

use Respect\Validation\Validator as v;

// Einzelne Regelvalidierung
$number = 123;
v::numericVal()->validate($number); // true

// Mehrere regelkettenvalidierung
$usernameValidator = v::alnum()->noWhitespace()->length(1, 15);
$usernameValidator->validate('alganet'); // true

// Erhalten des ersten fehlgeschlagenen Validierungsgrundes
try {
    $usernameValidator->setName('Benutzername')->check('alg  anet');
} catch (ValidationException $exception) {
    echo $exception->getMessage(); // Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten
}

// Erhalten aller fehlgeschlagenen Validierungsgründe
try {
    $usernameValidator->setName('Benutzername')->assert('alg  anet');
} catch (ValidationException $exception) {
    echo $exception->getFullMessage();
    // Hier werden
    // - Benutzername muss folgenden Regeln entsprechen
    //     - Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten
    //     - Benutzername darf keine Leerzeichen enthalten

    var_export($exception->getMessages());
    // Ausgabe
    // array (
    //   'alnum' => 'Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten',
    //   'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten',
    // )
}

// Anpassung von Fehlermeldungen
try {
    $usernameValidator->setName('Benutzername')->assert('alg  anet');
} catch (ValidationException $exception) {
    var_export($exception->getMessages([
        'alnum' => 'Benutzername darf nur Buchstaben und Zahlen enthalten',
        'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten',
        'length' => 'Länge entspricht den Regeln, daher wird diese Meldung nicht angezeigt'
    ]);
    // Ausgabe
    // array(
    //    'alnum' => 'Benutzername darf nur Buchstaben und Zahlen enthalten',
    //    'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten'
    // )
}

// Objektvalidierung
$user = new stdClass;
$user->name = 'Alexandre';
$user->birthdate = '1987-07-01';
$userValidator = v::attribute('name', v::stringType()->length(1, 32))
                ->attribute('birthdate', v::date()->minAge(18));
$userValidator->validate($user); // true

// Array validieren
$data = [
    'parentKey' => [
        'field1' => 'value1',
        'field2' => 'value2'
        'field3' => true,
    ]
];
v::key(
    'parentKey',
    v::key('field1', v::stringType())
        ->key('field2', v::stringType())
        ->key('field3', v::boolType())
    )
    ->assert($data); // auch mit check() oder validate()

// Optionale Validierung
v::alpha()->validate(''); // false 
v::alpha()->validate(null); // false 
v::optional(v::alpha())->validate(''); // true
v::optional(v::alpha())->validate(null); // true

// Negativregel
v::not(v::intVal())->validate(10); // false

Validator Unterschied zwischen den drei Methoden validate() check() assert()

validate() gibt einen booleschen Wert zurück und wirft keine Ausnahme

check() wirft eine Ausnahme, wenn die Validierung fehlschlägt, gibt die erste Validierungsfehlergrund zurück

assert() wirft eine Ausnahme, wenn die Validierung fehlschlägt, gibt alle Validierungsfehlergründe zurück

Liste der häufig verwendeten Validierungsregeln

Alnum() enthält nur Buchstaben und Zahlen

Alpha() enthält nur Buchstaben

ArrayType() Array-Typ

Between(mixed $minimum, mixed $maximum) überprüft, ob die Eingabe zwischen zwei Werten liegt

BoolType() überprüft, ob es sich um einen Booleschen Wert handelt

Contains(mixed $expectedValue) überprüft, ob die Eingabe bestimmte Werte enthält

ContainsAny(array $needles) überprüft, ob die Eingabe mindestens einen bestimmten Wert enthält

Digit() überprüft, ob die Eingabe nur Zahlen enthält

Domain() überprüft, ob es sich um eine gültige Domain handelt

Email() überprüft, ob es sich um eine gültige E-Mail-Adresse handelt

Extension(string $extension) überprüft die Dateierweiterung

FloatType() überprüft, ob es sich um eine Gleitkommazahl handelt

IntType() überprüft, ob es sich um eine ganze Zahl handelt

Ip() überprüft, ob es sich um eine IP-Adresse handelt

Json() überprüft, ob es sich um JSON-Daten handelt

Length(int $min, int $max) überprüft, ob die Länge innerhalb des angegebenen Bereichs liegt

LessThan(mixed $compareTo) überprüft, ob die Länge kleiner als der angegebene Wert ist

Lowercase() überprüft, ob es sich um Kleinbuchstaben handelt

MacAddress() überprüft, ob es sich um eine MAC-Adresse handelt

NotEmpty() überprüft, ob es nicht leer ist

NullType() überprüft, ob es sich um null handelt

Number() überprüft, ob es sich um eine Nummer handelt

ObjectType() überprüft, ob es sich um ein Objekt handelt

StringType() überprüft, ob es sich um einen Zeichenfolgentyp handelt

Url() überprüft, ob es sich um eine URL handelt

Weitere Validierungsregeln finden Sie unter https://respect-validation.readthedocs.io/en/2.0/list-of-rules/

Weitere Informationen

Besuchen Sie https://respect-validation.readthedocs.io/en/2.0/