Numeeristen parametrien vahvistaminen PHP:ssä. Php-numero tarkista säännöllinen lauseke tarkista, onko se numero

Tällä hetkellä sivustolla on käynnissä aktiivinen työ uuden osion käynnistämiseksi. Ja kun kirjoitettiin sille joitain skriptejä, tuli tarpeelliseksi tarkistaa muuttujien numerot. Eikä vain numero (loppujen lopuksi 1,5 on myös luku), vaan kokonaisluku. Ja näin tein tämän tarkistuksen.

Tarkistetaan, onko muuttuja PHP:ssä kokonaisluku

Tarkistaaksemme PHP:ssä, onko luku kokonaisluku, käytämme säännöllistä lauseketta:

Vastaavasti, jos muuttuja on kokonaisluku, suoritamme tarvitsemamme toiminnon ja päinvastoin.

Tarkistaa, onko muuttuja JavaScriptissä kokonaisluku

JavaScriptissä asiat ovat hieman erilaisia, ja tähän meidän on kirjoitettava oma pieni funktiomme:

Funktio number_scan(num) ( return (num ^ 0) === num; )

ja käytä sitä testaamiseen:

funktio numero_skannaa(num) ( return (num ^ 0) === num; ) var number = "1.3"; if(number_scan(luku)) ( // Toiminto, jos luku on kokonaisluku) else ( // Toiminto, jos luku on murtoluku tai muuttuja ei ole ollenkaan luku)

Myös tässä, jos muuttuja on yhtä suuri kuin kokonaisluku, suoritetaan haluamasi toiminto ja päinvastoin.

Kirjailija: Tervehdys, ystävät. Tässä artikkelissa aloitamme suoraan säännöllisten lausekkeiden ominaisuuksien tutkimisen, tutustumme PHP:n preg_match()-funktioon ja luomme myös ensimmäisen säännöllisen lausekkeen luvun tarkistamiseksi.

Tämä artikkeli kannattaa luultavasti aloittaa sillä tosiasialla, että säännölliset lausekkeet ovat erittäin tehokas työkalu tekstin kanssa työskentelemiseen. Kuten jo tiedät, säännöllisten lausekkeiden avulla voimme löytää kirjaimellisesti mitä tahansa tekstijoukosta. Tällaista valtaa ei kuitenkaan pidä käyttää väärin. Älä unohda, että PHP tarjoaa meille monia toimintoja merkkijonojen, tyyppien ja niin edelleen käsittelemiseen, joiden avulla voimme tarkistaa esimerkiksi tietyn merkin tai alimerkkijonon olemassaolon merkkijonossa.

Siksi, jos ongelma on mahdollista ratkaista käyttämättä säännöllisiä lausekkeita, kannattaa käyttää tätä mahdollisuutta, koska säännöllisten lausekkeiden kanssa työskentelevät funktiot ovat yleensä resurssivaltaisempia. Tässä tapauksessa ongelma voidaan ratkaista ilman säännöllisiä lausekkeita. Voit esimerkiksi tarkistaa, ovatko kaikki merkkijonon merkit numeerisia käyttämällä ctype_digit()-funktiota.

Mutta artikkelissa esitetyn tehtävän ehtojen mukaan meidän on käytettävä säännöllisiä lausekkeita, joten ratkaisemme tehtävän preg_match()-funktiolla. Tämä funktio tarkistaa merkkijonon säännöllisen lausekkeen mallia vastaan. Funktiossa on 5 parametria, joista käytännössä vain kaksi ensimmäistä ovat lähes aina käytössä.

Funktion ensimmäinen parametri on säännöllinen lausekemalli. Toinen on tarkistettava merkkijono. Joskus saatamme tarvita kolmannen parametrin, joka määrittää, minkä taulukon saamme hakutuloksilla.

Luodaan ensimmäinen mallimme. Se voi näyttää tältä:

$pattern = "#^+$#";

$pattern = "#^+$#" ;

Ensi silmäyksellä se voi näyttää käsittämättömältä ja hieman pelottavalta. Tässä ei kuitenkaan ole mitään kauheaa, nyt katsomme sitä. Aloitetaan siitä, että säännölliset lausekkeet käyttävät aktiivisesti erikoismerkkejä, ns. metahahmoja. Niitä on mallissamme melko paljon:

^ — rivin alun metamerkki

$ - rivin lopun metamerkki

- merkkiluokan metamerkit

+ on kvantori, joka ilmaisee yhden tai useamman merkin tai merkkiryhmän esiintymisen, jota seuraa kvantori.

Mitä saimme? Kuinka voit lukea koottua säännöllistä lauseketta? Ja se kuuluu näin:

koko merkkijono tarkistetaan alusta loppuun (metamerkit ^$)

rivi voi sisältää vain numeroita 0-9 ()

rivillä on oltava vähintään yksi numero (+)

Tarkastellaan nyt mallia toiminnassa.

Kuten näet, säännöllinen lauseke toimii oikein. Sen alle mahtuu vain rivit, jotka koostuvat kokonaan numeroista. Muuten, jos testaat myös sivustolla regexr.com ja tekstissä on useampi kuin yksi rivi, sinun on määritettävä mallille erityinen lippu - m, jonka avulla malli toimii useiden rivin tekstiä. Voit tehdä tämän oikeassa yläkulmassa, valikkokohdan lipuissa.

Huomaa, mitä tapahtuu, jos poistamme rivin alun ja/tai lopun metamerkit:

Nyt emme validoi koko riviä, vaan yksinkertaisesti etsimme jotain riviltä. Tämän seurauksena numerot löytyivät kolmannelta riviltä, ​​vaikka ongelman ehtojen mukaan tämä rivi ei sovi meille. Käytetään nyt preg_match-funktiota ja tarkistetaan jokainen rivi erikseen:

$arr = ["123", "testi", "45ew45", "456"]; $pattern = "#^+$#"; foreach($arr kuin $item)( if(preg_match($pattern, $item))( echo "

Merkkijono $item sisältää vain numeroita

"; )else( echo"

$item-rivi ei sovellu

"; } }

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

$pattern = "#^+$#" ;

foreach ($arr kuin $item) (

Otetaan esimerkiksi tämä osoite: http://example.com/price.php?product=859844&page=99.

Skripti näyttää listan tuotteen myymälöistä. Valinnainen sivuparametri määrittää sivunumeron. Jos sivua ei ole määritetty ja URL-osoite näyttää tältä http://example.com/price.php?product=859844 , näytämme ensimmäisen sivun.

Ennen PHP 5.2.0:aa ongelma voitiin ratkaista tällä yksinkertaisella tavalla.

// Funktio luonnollisen luvun parametrin saamiseksi // $arr = parametrien joukko ($GET tai $POST), $nimi = parametrin nimi, // Funktio palauttaa parametrin arvon tai $default jos parametri puuttuu tai virheellinen funktio get_param_nat($ arr, $name, $default=null) ( if (!isset($arr[$name])) palauttaa $default; // Tarkista hyvin yksinkertaisella tavalla, muunna parametri numeroon, sitten takaisin merkkijonoon // Jos kaikki on kunnossa, tuloksena olevan merkkijonon on vastattava parametrin alkuperäistä arvoa $val = $arr[$nimi] $intval = intval($val); Tarkistamme, että meillä oleva luku on suurempi kuin nolla 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);

Versiosta 5.2.0 alkaen PHP:ssä ilmestyi joukko suodatintoimintoja: filter_var, filter_input, filter_var_array ja useita muita. Funktiot voivat tarkistaa muuttujista kokonaislukuja, liukulukuja, sähköpostiviestejä, IP-osoitteita, URL-osoitetta jne. ja myös tyhjentää merkkijonoja määritettyjen parametrien mukaan.

Kirjoitetaan koodi uudelleen filter_input-funktiolla.

Funktio get_param_nat($type, $name, $default=null) ( $arvo = filter_input($type, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input palauttaa epätosi, jos suodatetaan epäonnistui, tai null, jos muuttuja on määrittelemätön if ($val === null || $val === false) return $default return $val ) // Tarkista tuoteparametri if (($product = get_param_nat(INPUT_GET) , "tuote")) === null) die("Tuotetta ei löydy"); // Hanki sivunumero $page = get_param_nat(INPUT_GET, "sivu", 1);

Pieni testaus osoitti, että get_param_nat-funktion kahden muunnelman toimintanopeus on lähes sama, ja jos parametria ei ole, esimerkiksi sivua ei ole määritetty, ensimmäinen variantti toimii jopa hieman nopeammin.

Joten sinun on päätettävä, mitä käyttää. Itse käytän ensimmäistä toimintoa, se on jotenkin lähempi ja selkeämpi minulle.

No, pieni lyyrinen poikkeama loppuun. Jotta vältetään sivun kopioiminen hakukoneille, esimerkiksi ilman sivua ja sivu=1:llä, suosittelen ensisijaisen URL-osoitteen määrittämistä sivun otsikkoon. Se näyttää suunnilleen tältä:

...