Php int üçün dəyəri yoxlayır. Nömrə üçün müntəzəm ifadə yoxlanışı. PHP-də dəyişənin tam ədəd olub-olmadığını yoxlamaq

Müəllifdən: Salam dostlar. Bu yazıda biz birbaşa ifadələrin imkanlarını öyrənməyə, PHP-də preg_match() funksiyası ilə tanış olmağa, həmçinin ədədi yoxlamaq üçün ilk müntəzəm ifadəni yaradacayıq.

Yəqin ki, bu məqaləni müntəzəm ifadələrin mətnlə işləmək üçün çox güclü bir vasitə olması ilə başlamağa dəyər. Artıq bildiyiniz kimi, müntəzəm ifadələrin köməyi ilə biz mətn massivində hərfi mənada hər şeyi tapa bilərik. Ancaq belə bir səlahiyyətdən sui-istifadə edilməməlidir. Unutmayın ki, PHP bizə sətirlər, növlər və s. ilə işləmək üçün çoxlu funksiyalar təklif edir ki, bu da məsələn, sətirdə müəyyən simvolun və ya alt sətirin mövcudluğunu yoxlamağa imkan verir.

Buna görə də, müntəzəm ifadələrdən istifadə etmədən problemi həll etmək mümkündürsə, bu fürsətdən istifadə etməyə dəyər, çünki müntəzəm ifadələrlə işləmək funksiyaları adətən daha çox resurs tələb edir. Bu halda problemi nizamlı ifadələr olmadan həll etmək olar. Məsələn, ctype_digit() funksiyasından istifadə edərək sətirdəki bütün simvolların ədədi olub olmadığını yoxlaya bilərsiniz.

Ancaq məqalədə qoyulan tapşırığın şərtlərinə uyğun olaraq, biz müntəzəm ifadələrdən istifadə etməliyik, ona görə də preg_match() funksiyasından istifadə edərək tapşırığı həll edəcəyik. Bu funksiya sətri normal ifadə nümunəsinə qarşı yoxlayır. Funksiya 5 parametrə malikdir, onlardan praktikada yalnız ilk 2-si demək olar ki, həmişə istifadə olunur.

Funksiyanın ilk parametri müntəzəm ifadə nümunəsi olacaq. İkincisi yoxlanılan sətirdir. Bəzən axtarış nəticələri ilə bir sıra alacağımızı təyin etməklə üçüncü parametrə ehtiyacımız ola bilər.

Gəlin ilk şablonumuzu yaradaq. Bu belə görünə bilər:

$pattern = "#^+$#";

$pattern = "#^+$#" ;

İlk baxışdan çaşqın və bir qədər qorxulu görünə bilər. Ancaq burada dəhşətli bir şey yoxdur, indi buna baxacağıq. Gəlin ondan başlayaq ki, müntəzəm ifadələr sözdə xüsusi simvollardan aktiv şəkildə istifadə edir. metaxarakterlər. Şablonumuzda onlardan kifayət qədər çoxu var:

^ — sətrin başlanğıcı üçün metaxarakter

$ - sətir sonu metaxarakteri

- xarakter sinfi metasimvolları

+ bir simvolun və ya simvollar qrupunun 1 və ya daha çox təkrarlanmasını və ardınca kəmiyyət göstəricisini ifadə edən kəmiyyət göstəricisidir.

Yaxşı, nə əldə etdik? Bəstələnmiş müntəzəm ifadə nümunəsini necə oxuya bilərsiniz? Və belə oxunur:

bütün sətir əvvəldən axıra qədər təsdiqlənəcək (meta simvollar ^$)

sətirdə yalnız 0-dan 9-a qədər rəqəmlər ola bilər ()

sətirdə ən azı bir rəqəm (+) olmalıdır

İndi şablonu işlək vəziyyətdə yoxlayaq.

Gördüyünüz kimi, nizamlı ifadə düzgün işləyir. Onun altına yalnız tamamilə rəqəmlərdən ibarət xətlər uyğun gəlir. Yeri gəlmişkən, əgər siz də regexr.com saytında test edirsinizsə və mətndə birdən çox sətir varsa, o zaman şablon üçün xüsusi bayraq - m təyin etməlisiniz ki, bu da şablonun çoxlu ilə işləməsinə imkan verəcəkdir. sətir mətni. Bunu yuxarı sağ küncdə, menyu elementinin bayraqlarında edə bilərsiniz.

Sətirin başlanğıcını və/yaxud sonunu silsək nə baş verəcəyinə diqqət yetirin:

İndi biz bütün xətti təsdiqləmirik, sadəcə olaraq xəttdə nəyisə axtarırıq. Nəticədə üçüncü sətirdə rəqəmlər tapıldı, baxmayaraq ki, problemin şərtlərinə görə bu xətt bizə uyğun deyil. İndi preg_match funksiyasından istifadə edək və sətirlərin hər birini ayrıca yoxlayaq:

$arr = ["123", "test", "45ew45", "456"]; $pattern = "#^+$#"; foreach($arr kimi $element)( if(preg_match($pattern, $element))( echo "

$item sətri yalnız rəqəmlərdən ibarətdir

"; )else( echo "

$element xətti uyğun deyil

"; } }

$arr = [ "123" , "test" , "45ew45" , "456" ] ;

$pattern = "#^+$#" ;

foreach ($arr $element kimi) (

Hazırda saytda yeni bölmənin işə salınması üçün aktiv iş aparılır. Və bunun üçün bəzi skriptlər yazarkən rəqəmlər üçün dəyişənləri yoxlamaq lazım gəldi. Həm də təkcə bir rəqəm deyil (axı, 1,5 də bir rəqəmdir), tam rəqəmdir. Və mən bu yoxlamanı belə etdim.

PHP-də dəyişənin tam ədəd olub-olmadığını yoxlamaq

PHP-də nömrənin tam olub-olmadığını yoxlamaq üçün müntəzəm ifadədən istifadə edirik:

Müvafiq olaraq, əgər dəyişən tam ədəddirsə, biz lazım olan hərəkəti yerinə yetiririk və əksinə.

JavaScript-də dəyişənin tam ədəd olub-olmadığını yoxlamaq

JavaScript-də işlər bir az fərqlidir və burada öz kiçik funksiyamızı yazmalıyıq:

Funksiya nömrəsi_scan(num) ( qaytarmaq (num ^ 0) === ədəd; )

və sınaq üçün istifadə edin:

funksiya nömrəsi_scan(num) ( qaytarmaq (num ^ 0) === ədəd; ) var sayı = "1.3"; if(nömrə_skan(nömrə)) ( // Ədəd tam ədəddirsə hərəkət) else ( // Ədəd kəsrdirsə və ya dəyişən ümumiyyətlə ədəd deyilsə hərəkət)

Burada da dəyişən tam ədədə bərabərdirsə, istədiyiniz hərəkət yerinə yetirilir və əksinə.

Məsələn, bu ünvanı götürün: http://example.com/price.php?product=859844&page=99.

Skript məhsul məhsulu üçün mağazalardakı qiymətlərin siyahısını göstərir isteğe bağlı səhifə parametri səhifə nömrəsini təyin edir. Səhifə göstərilməyibsə və url http://example.com/price.php?product=859844 kimi görünürsə, biz ilk səhifəni göstərəcəyik.

PHP 5.2.0-dan əvvəl problem bu sadə yolla həll edilə bilərdi.

// Natural ədəd olan parametrin alınması funksiyası // $arr = parametrlər massivi ($GET və ya $POST), $name = parametrin adı, // Funksiya parametrin dəyərini və ya $default qaytarır. parametr yoxdursa və ya səhvdirsə get_param_nat($ arr, $name, $default=null) ( əgər (!isset($arr[$name])) qaytarın $default; // Çox sadə şəkildə yoxlayın, çevirin parametri rəqəmə, sonra isə sətirə qayıdın // Əgər hər şey qaydasındadırsa, onda əldə edilən sətir parametrin orijinal dəyərinə uyğun olmalıdır $val = $arr[$name] $intval = intval($val); Əlimizdəki nömrənin sıfırdan böyük olduğunu yoxlayırıq if (strval($intval) != = $val || $intval< 1) return $default; return $intval; } // Проверяем параметр product if (($product = get_param_nat($_GET, "product")) === null) die("Product not found"); // Получаем номер страницы $page = get_param_nat($_GET, "page", 1);

5.2.0 versiyasından başlayaraq, PHP-də bir qrup Filter funksiyaları meydana çıxdı: filter_var, filter_input, filter_var_array və bir neçə başqa. Funksiyalar dəyişənləri tam ədədlər, üzən nöqtə nömrələri, e‑poçt, ip-ünvanlar, url və s. üçün yoxlaya bilər, həmçinin müəyyən edilmiş parametrlərə uyğun olaraq sətirləri təmizləyə bilər.

filter_input funksiyasından istifadə edərək kodu yenidən yazaq.

Get_param_nat funksiyası($type, $name, $default=null) ( $val = filter_input($type, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input süzgəcdən keçirsə, yalanı qaytarır. uğursuz və ya dəyişən qeyri-müəyyəndirsə null əgər ($val === null || $val === false) qaytarmaq $default ) // Əgər (($product = get_param_nat(INPUT_GET)) məhsul parametrini yoxlayın. , "məhsul")) === null) die("Məhsul tapılmadı"); // Səhifənin nömrəsini alın $page = get_param_nat(INPUT_GET, "səhifə", 1);

Kiçik bir sınaq göstərdi ki, get_param_nat funksiyasının iki variantının işləmə sürəti demək olar ki, eynidir və parametr olmadıqda, məsələn, səhifə göstərilmədikdə, birinci variant daha da sürətlə işləyəcəkdir.

Beləliklə, nə istifadə edəcəyinizə qərar vermək sizin ixtiyarınızdadır. Mən şəxsən birinci funksiyadan istifadə edirəm; bu, mənə daha yaxın və aydındır.

Yaxşı, sonda kiçik bir lirik təxribat. Axtarış motorları üçün səhifənin təkrarlanmasının qarşısını almaq üçün, məsələn, səhifəsiz və page=1 ilə səhifənin baş hissəsində kanonik url-i göstərməyi məsləhət görürəm. Bu kimi bir şey görünəcək:

...