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