Validator
Composer bietet viele Validatoren, die direkt 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' => 'Der Name darf maximal 25 Zeichen lang sein',
'age.number' => 'Das Alter muss eine Zahl sein',
'age.between' => 'Das 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());
}
Hinweis
In Webman wird die MethodeValidate::rule()
von think-validate nicht unterstützt.
Validator workerman/validation
Beschreibung
Das Projekt ist die chinesische 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']);
}
}
Zugriff über jQuery
$.ajax({
url : 'http://127.0.0.1:8787',
type : "post",
dataType:'json',
data : {nickname:'汤姆', username:'tom cat', password: '123456'}
});
Erhalten Sie das Ergebnis:
{"code":500,"msg":"Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten"}
Erläuterung:
v::input(array $input, array $rules)
wird verwendet, um Daten zu validieren und zu sammeln. Wenn die Datenvalidierung fehlschlägt, wird die Ausnahme Respect\Validation\Exceptions\ValidationException
ausgelöst. Bei erfolgreicher Validierung wird das validierte Datenarray zurückgegeben.
Wenn der Geschäftscode die Validierungsanomalie nicht abfängt, fängt das Webman-Framework sie automatisch ab und wählt basierend auf dem HTTP-Anforderungsheader aus, ob JSON-Daten (ähnlich {"code":500, "msg":"xxx"}
) oder eine reguläre Fehlermeldung zurückgegeben werden. Wenn das Rückgabeformat nicht den Geschäftsanforderungen entspricht, können Entwickler die ValidationException
-Ausnahme selbst abfangen und die erforderlichen Daten zurückgeben, ähnlich dem 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 Funktionsanleitung
use Respect\Validation\Validator as v;
// Einzelne Regelvalidierung
$number = 123;
v::numericVal()->validate($number); // true
// Mehrere Regeln in einer Kettenvalidierung
$usernameValidator = v::alnum()->noWhitespace()->length(1, 15);
$usernameValidator->validate('alganet'); // true
// Erhalten Sie den Grund für das erste Validierungsfehler
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 Sie alle Gründe für die Validierungsfehler
try {
$usernameValidator->setName('Benutzername')->assert('alg anet');
} catch (ValidationException $exception) {
echo $exception->getFullMessage();
// Es wird gedruckt
// - Benutzername muss den folgenden Regeln entsprechen
// - Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten
// - Benutzername darf keine Leerzeichen enthalten
var_export($exception->getMessages());
// Es wird gedruckt
// array (
// 'alnum' => 'Benutzername darf nur Buchstaben (a-z) und Zahlen (0-9) enthalten',
// 'noWhitespace' => 'Benutzername darf keine Leerzeichen enthalten',
// )
}
// Benutzerdefinierte Fehlermeldung
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' => 'Die Länge entspricht den Anforderungen, daher wird diese nicht angezeigt'
]));
// Es wird gedruckt
// 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-Validierung
$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); // kann auch check() oder validate() verwenden
// 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
Unterschiede zwischen den drei Validator-Methoden validate()
, check()
, assert()
validate()
gibt einen booleschen Wert zurück und wirft keine Ausnahmen
check()
wirft eine Ausnahme, wenn die Validierung fehlschlägt, und gibt mit $exception->getMessage()
den Grund für die erste Validierungsfehler zurück
assert()
wirft eine Ausnahme, wenn die Validierung fehlschlägt und ermöglicht, alle Gründe für die Validierungsfehler mit $exception->getFullMessage()
zu erhalten
Häufig verwendete Validierungsregeln
Alnum()
enthält nur Buchstaben und Zahlen
Alpha()
enthält nur Buchstaben
ArrayType()
Arraytyp
Between(mixed $minimum, mixed $maximum)
validiert, ob der Eingabewert zwischen anderen zwei Werten liegt.
BoolType()
validiert, ob es sich um einen booleschen Wert handelt
Contains(mixed $expectedValue)
validiert, ob die Eingabe bestimmten Werten enthält
ContainsAny(array $needles)
validiert, ob die Eingabe mindestens einen definierten Wert enthält
Digit()
validiert, ob die Eingabe nur Zahlen enthält
Domain()
validiert, ob es sich um einen gültigen Domainnamen handelt
Email()
validiert, ob es sich um eine gültige E-Mail-Adresse handelt
Extension(string $extension)
validiert die Dateiendung
FloatType()
validiert, ob es sich um einen Gleitkommawert handelt
IntType()
validiert, ob es sich um eine Ganzzahl handelt
Ip()
validiert, ob es sich um eine IP-Adresse handelt
Json()
validiert, ob es sich um JSON-Daten handelt
Length(int $min, int $max)
validiert, ob die Länge im angegebenen Bereich liegt
LessThan(mixed $compareTo)
validiert, ob die Länge kleiner als ein gegebener Wert ist
Lowercase()
validiert, ob es sich um Kleinbuchstaben handelt
MacAddress()
validiert, ob es sich um eine MAC-Adresse handelt
NotEmpty()
validiert, ob es nicht leer ist
NullType()
validiert, ob es null ist
Number()
validiert, ob es sich um eine Zahl handelt
ObjectType()
validiert, ob es sich um ein Objekt handelt
StringType()
validiert, ob es sich um eine Zeichenkette handelt
Url()
validiert, ob es sich um eine URL handelt
Weitere Validierungsregeln finden Sie unter https://respect-validation.readthedocs.io/en/2.0/list-of-rules/
Mehr Inhalte
Besuchen Sie https://respect-validation.readthedocs.io/en/2.0/