Değer Doğrulayıcılar

Bir değişkenin örneğin geçerli bir e-posta adresi içerdiğini hızlı ve kolay bir şekilde doğrulamanız mı gerekiyor? O zaman Nette\Utils\Validators kullanışlı olacaktır, değerleri doğrulamak için yararlı işlevlere sahip statik bir sınıf.

Kurulum:

composer require nette/utils

Tüm örnekler aşağıdaki sınıf takma adının tanımlandığını varsayar:

use Nette\Utils\Validators;

Temel Kullanım

Validators sınıfı, kodunuzda kullanmak üzere isList(), isUnicode(), isEmail(), isUrl() vb. gibi değerleri doğrulamaya yönelik bir dizi yönteme sahiptir:

if (!Validators::isEmail($email)) {
	throw new InvalidArgumentException;
}

Ayrıca, değerin beklenen türleri karşılayıp karşılamadığını doğrulayabilir; bu, tek tek seçeneklerin dikey bir çubuk | ile ayrıldığı bir dizedir. Bu, if() kullanarak birlik türlerini doğrulamayı kolaylaştırır:

if (!Validators::is($val, 'int|string|bool')) {
	// ...
}

Ancak aynı zamanda beklentileri dizeler halinde yazmanın (örneğin ek açıklamalarda veya yapılandırmada) ve ardından bunlara göre doğrulamanın gerekli olduğu bir sistem oluşturma fırsatı da verir.

Ayrıca, karşılanmadığı takdirde bir istisna fırlatan assertion da bildirebilirsiniz.

Beklenen Türler

Beklenen tipler, dikey bir çubukla ayrılmış bir veya daha fazla varyanttan oluşan bir dizedir |, similar to writing types in PHP (ie. 'int|string|bool'). Nullable gösterime de izin verilir ?int.

Tüm elemanları belirli bir türden olan bir dizi int[] biçiminde yazılır.

Bazı türlerin ardından iki nokta üst üste işareti ve :length uzunluğu veya aralığı gelebilir :[min]..[max]örneğin string:10 (10 bayt uzunluğunda bir dize), float:10.. (10 ve daha büyük sayı), array:..10 (on öğeye kadar dizi) veya list:10..20 (10 ila 20 öğeli liste) veya pattern:[0-9]+.

Türlere ve kurallara genel bakış:

PHP türleri
array öğe sayısı için aralık verilebilir
bool  
float değer için aralık verilebilir
int değer için aralık verilebilir
null  
object  
resource  
scalar int|float|bool|string

Bayt cinsinden uzunluk için | string | aralığı verilebilir

callable
iterable
mixed
sözde tipler
list dizinlenmiş dizi, öğe sayısı için aralık verilebilir
none boş değer: '', null, false
number int|float
numeric metinsel gösterim dahil sayı
numericint metinsel gösterim dahil tamsayı
unicode UTF-8 dizesi, karakter cinsinden uzunluk için aralık verilebilir
karakter sınıfı (boş bir dize olamaz)
alnum tüm karakterler alfanümeriktir
alpha tüm karakterler harftir [A-Za-z]
digit tüm karakterler rakamdır
lower tüm karakterler küçük harftir [a-z]
space tüm karakterler boşluktur
upper tüm karakterler büyük harftir [A-Z]
xdigit tüm karakterler onaltılık basamaklardır [0-9A-Fa-f]
sözdizimi doğrulaması
pattern tüm dizenin eşleşmesi gereken bir düzenli ifade
email E-posta
identifier PHP tanımlayıcısı
url URL
uri URI
ortam doğrulama
class mevcut sınıftır
interface mevcut arayüzdür
directory mevcut dizindir
file mevcut dosya

İddia

assert($value, string $expected, string $label='variable')void

Değerin boru ile ayrılmış beklenen türlerden olduğunu doğrular. Değilse, Nette\Utils\AssertionException istisnasını atar. İstisna mesajındaki variable kelimesi $label parametresi ile değiştirilebilir.

Validators::assert('Nette', 'string:5'); // OK
Validators::assert('Lorem ipsum dolor sit', 'string:78');
// AssertionException: The variable expects to be string:78, string 'Lorem ipsum dolor sit' given.

assertField(array $array, string|int $key, string $expected=null, string $label=null)void

$array dizisindeki $key öğesinin boru ile ayrılmış beklenen türlerden olduğunu doğrular. Değilse, Nette\Utils\AssertionException istisnasını atar. İstisna mesajındaki item '%' in array dizesi $label parametresi ile değiştirilebilir.

$arr = ['foo' => 'Nette'];

Validators::assertField($arr, 'foo', 'string:5'); // OK
Validators::assertField($arr, 'bar', 'string:15');
// AssertionException: Missing item 'bar' in array.
Validators::assertField($arr, 'foo', 'int');
// AssertionException: The item 'foo' in array expects to be int, string 'Nette' given.

Doğrulayıcılar

is($value, string $expected)bool

Değerin boru ile ayrılmış beklenen türlerden olup olmadığını kontrol eder.

Validators::is(1, 'int|float');  // true
Validators::is(23, 'int:0..10'); // false
Validators::is('Nette Framework', 'string:15');     // true, length is 15 bytes
Validators::is('Nette Framework', 'string:8..');    // true
Validators::is('Nette Framework', 'string:30..40'); // false

isEmail(mixed $value): bool

Değerin geçerli bir e-posta adresi olduğunu doğrular. Alan adının gerçekten var olduğunu doğrulamaz, yalnızca sözdizimi doğrulanır. İşlev, unicode da olabilen gelecekteki TLD'leri de sayar.

Validators::isEmail('example@nette.org'); // true
Validators::isEmail('example@localhost'); // false
Validators::isEmail('nette');             // false

isInRange(mixed $value, array $range)bool

Değerin verilen aralıkta olup olmadığını kontrol eder [min, max]burada üst veya alt sınır atlanabilir (null). Sayılar, dizeler ve DateTime nesneleri karşılaştırılabilir.

Her iki sınır da eksikse ([null, null]) veya değer null ise, false döndürür.

Validators::isInRange(5, [0, 5]);     // true
Validators::isInRange(23, [null, 5]); // false
Validators::isInRange(23, [5]);       // true
Validators::isInRange(1, [5]);        // false

isNone(mixed $value): bool

Değerin 0, '', false veya null olup olmadığını kontrol eder.

Validators::isNone(0); // true
Validators::isNone(''); // true
Validators::isNone(false); // true
Validators::isNone(null); // true
Validators::isNone('nette'); // false

isNumeric(mixed $value): bool

Değerin bir sayı mı yoksa bir dize içinde yazılmış bir sayı mı olduğunu kontrol eder.

Validators::isNumeric(23);      // true
Validators::isNumeric(1.78);    // true
Validators::isNumeric('+42');   // true
Validators::isNumeric('3.14');  // true
Validators::isNumeric('nette'); // false
Validators::isNumeric('1e6');   // false

isNumericInt(mixed $value)bool

Değerin bir tamsayı mı yoksa bir dize içinde yazılmış bir tamsayı mı olduğunu kontrol eder.

Validators::isNumericInt(23);      // true
Validators::isNumericInt(1.78);    // false
Validators::isNumericInt('+42');   // true
Validators::isNumericInt('3.14');  // false
Validators::isNumericInt('nette'); // false

isPhpIdentifier(string $value)bool

Değerin PHP'de sözdizimsel olarak geçerli bir tanımlayıcı olup olmadığını denetler, örneğin sınıf, yöntem, işlev vb. isimleri için.

Validators::isPhpIdentifier('');        // false
Validators::isPhpIdentifier('Hello1');  // true
Validators::isPhpIdentifier('1Hello');  // false
Validators::isPhpIdentifier('one two'); // false

isBuiltinType(string $type)bool

$type PHP yerleşik türü olup olmadığını belirler. Aksi takdirde, sınıf adıdır.

Validators::isBuiltinType('string'); // true
Validators::isBuiltinType('Foo');    // false

isTypeDeclaration(string $type)bool

Tür bildiriminin sözdizimsel olarak doğru olup olmadığını denetler.

Validators::isTypeDeclaration('?string');      // true
Validators::isTypeDeclaration('string|null');  // true
Validators::isTypeDeclaration('Foo&Bar');      // true
Validators::isTypeDeclaration('(A&C)|null');   // true

Validators::isTypeDeclaration('?string|null'); // false
Validators::isTypeDeclaration('|foo');         // false
Validators::isTypeDeclaration('(A|B)');        // false

isClassKeyword(string $type)bool

$type adresinin self, parent, static dahili türlerinden biri olup olmadığını belirleyin.

Validators::isClassKeyword('self'); // true
Validators::isClassKeyword('Foo');  // false

isUnicode(mixed $value): bool

Değerin geçerli bir UTF-8 dizesi olup olmadığını kontrol eder.

Validators::isUnicode('nette'); // true
Validators::isUnicode('');      // true
Validators::isUnicode("\xA0");  // false

isUrl(mixed $value): bool

Değerin geçerli bir URL adresi olup olmadığını kontrol eder.

Validators::isUrl('https://nette.org:8080/path?query#fragment'); // true
Validators::isUrl('http://localhost');            // true
Validators::isUrl('http://192.168.1.1');          // true
Validators::isUrl('http://[::1]');                // true
Validators::isUrl('http://user:pass@nette.org');  // false
Validators::isUrl('nette.org');                   // false

isUri(string $value): bool

Değerin geçerli bir URI adresi olduğunu, yani aslında sözdizimsel olarak geçerli bir şema ile başlayan bir dize olduğunu doğrular.

Validators::isUri('https://nette.org');           // true
Validators::isUri('mailto:gandalf@example.org');  // true
Validators::isUri('nette.org');                   // false
versiyon: 4.0