PHP (regulární výraz) - co to je? Příklady a kontrola regulárních výrazů
Při práci s textem v jakémkoliv moderním programovacím jazyku, vývojáři neustále setkávat s cíli ověření vstupu pro splnění požadovaného vzoru, vyhledávání a nahrazování testů fragmentů a jiné druhy zpracování operací informativní charakter. Rozvíjet své vlastní validační algoritmy vede ke ztrátě času, kompatibilitu kódu a složitosti její rozvoj a modernizaci.
Obsah
Rychlý vývoj internetu a jazyků WEB-developmentu vyžadoval vytvoření univerzálního a kompaktního zařízení pro zpracování textu s minimálním množstvím kódu, který je pro tento účel vyžadován. PHP jazyk není výjimkou a je populární mezi začátečníky a profesionálními vývojáři. Pravidelný výraz jako jazyk textových šablon umožňuje zjednodušit úlohu zpracování textu a snížit kód programu na desítky a stovky řádků. Mnoho úkolů nelze vyřešit bez něj.
Pravidelné výrazy v PHP
PHP jazyk má tři mechanismy pro práci s regulárními výrazy - «ereg», «mb_ereg» a «Samo». Nejběžnější je rozhraní «Samo», jehož funkce poskytují přístup do knihovny PCRE regulární výraz podpory, který byl původně vyvinut pro jazyce Perl, který je obsažen v balíčku PHP. Samo-hledat funkce v daném textového řetězce vyhovující, podle určitého vzoru v jazyce regulárních výrazů.
Základy syntaxe
V rámci krátkého článku není možné podrobně popsat celou syntaxi regulárních výrazů, za tímto účelem existuje speciální literatura. Zde jsou jen základní prvky pro ukázání široké škály možností pro vývojáře a pochopení příkladů kódu.
V PHP je formální definice regulárního výrazu velmi obtížná a proto tento popis zjednodušujeme. Regulární výraz je textový řetězec. Skládá se z vymezené šablony a modifikátoru, který udává, jak s ní zacházet. V šablonách je možné zahrnout různé alternativy a opakování.
Například ve výrazu / d {3} - d {2} - d {2} / m oddělovač bude "/", pak jde šablona a symbol "M" bude modifikátor.
Celá síla regulárních výrazů je zakódována meta-mačkami. Hlavním metačným znakem jazyka je zpětné lomítko - "". Změní typ znaku, který následuje, na druhou stranu (tj. Obyčejný znak se změní na metacharakter a naopak). Dalším důležitým znakem metacharakteru je přímá čára "|", která specifikuje alternativní varianty šablony. Další příklady metacharakterů:
^ | Začátek objektu nebo řetězce |
( | Začátek podspolečnosti |
). | Konec podsvětí |
{{ | Původ kvantifikátoru |
}} | Konec kvantifikátoru |
d | desetinné číslo od 0 do 9 |
D | libovolný znak, který není číslicí |
s | prázdný znak, prostor, záložka |
w | slovníku |
PHP, zpracovávající regulární výrazy, považuje prostor za samostatný významný symbol, takže výrazy ABCDEF a ABC WHERE jsou odlišné.
Subpatterny
V PHP jsou pravidelné subpatterny přiděleny v závorce a někdy se nazývají "subexpressions". Proveďte následující funkce:
Alokace alternativ. Například, horečka se shoduje se slovy "Heat", "firebird" a "Hot". A bez konzol, bude to jen prázdný řetězec, "pták" a "pečený".
"Vzrušující" subpattern. To znamená, že pokud se podřetězec shoduje s šablonou, pak se všechny výsledky vráti jako výsledek. Pro přehlednost uvádíme příklad. Následuje následující regulární výraz: vítěz dostane ((zlatý | zlacený) (medaile | pohár)) - a řetězec pro hledání shody: "Vítěz získá zlatou medaili". Kromě původního výrazu bude výsledkem hledání: "Zlatá medaile", "Medaile", "zlato".
Operátoři opakování (kvadrifiery)
Při vytváření regulárních výrazů je často nutné analyzovat opakování čísel a symbolů. To není problém, pokud není příliš mnoho opakování. Ale co když nevíme jejich přesné číslo? V tomto případě musíte použít speciální metacharactery.
Pro popis opakování se používají quadriky - metacaraktery pro zadání čísla. Quadrices jsou dva typy:
- obecné, uzavřené v závorkách;
- zkrácený.
Celkový kvantifikátor se dotýká minimálního a maximálního počtu povolených opakování prvku ve formě dvou čísel v křivkách, například: x {2,5}. Pokud není známa maximální počet opakování, druhý argument není zadán: x {2,}.
Snížené kvantifikátory jsou symboly pro nejběžnější opakování, aby se zabránilo zbytečnému přetížení syntaxe. Obvykle se používají tři zkratky:
1. * - nula a více opakování, což odpovídá {0,}.
2. + jedno nebo více opakování, tj. {1,}.
3.? - nula nebo pouze jedno opakování - {0,1}.
Příklady regulárních výrazů
Pro ty, kteří se učí regulární výrazy, příklady - nejlepší učebnici. Dáváme málo, že ukázat své možnosti s minimálním úsilím. Veškerý kód je plně kompatibilní s verzemi PHP 4.x a vyšší. Chcete-li plně pochopit syntaxi a využití všech jazykových prvků doporučujeme knihu J .. Friedl, „regulárních výrazů“, který plně považován syntax, a existují příklady regulárních výrazů nejen PHP, ale i pro Python, Perl, MySQL, Java, Ruby, a C #.
Kontrola správnosti e-mailové adresy
Úkol. K dispozici je internetová stránka, na které je od návštěvníka požadována e-mailová adresa. Pravidelný výraz musí před odesláním zpráv zkontrolovat správnost přijaté adresy. Kontrola nezaručuje, že zadaná poštovní schránka skutečně existuje a přijímá písmena. Ale je možné odstranit záměrně špatné adresy.
Řešení. Stejně jako u jakéhokoliv programovacího jazyka, v PHP regex ověřovací email-adresa může být realizován různými způsoby a příklady v tomto článku nejsou konečné a jedinou možnou volbou. Proto se v každém případě budeme poskytnout seznam požadavků, které je třeba vzít v úvahu při plánování a konkrétní implementace zcela závisí na developera.
Takže výraz ověření platnosti e-mailu by měl zkontrolovat následující podmínky:
- Přítomnost symbolu @ v zdrojovém řetězci a absence mezery.
- Část domény adresy mimo symbol @ obsahuje pouze platné znaky pro názvy domén. Totéž platí pro jméno uživatele.
- Při ověřování uživatelského jména musíte určit, zda jsou přítomny speciální znaky, například apostrof nebo vertikální čára. Takové symboly jsou potenciálně nebezpečné a mohou být obsaženy v útoku, jako je SQL injekce. Vyhněte se těmto adresám.
- Uživatelská jména umožňují pouze jeden bod, který nemůže být prvním nebo posledním znakem řetězce.
- Název domény musí obsahovat nejméně dva a ne více než šest znaků.
Příklad, který bere v úvahu všechny tyto podmínky, je uveden na následujícím obrázku.
Ověřování adres URL
Úkol. Zkontrolujte, zda je zadaný textový řetězec platný URL. Opět platí, že pravidelné výrazy adresy URL mohou být implementovány různými způsoby.
Řešení. Naše konečná verze je následující:
/^(https?://)?([da-z.-]+).([az.]{2,6})([/w .-] *) * /? $ /
Nyní podrobněji analyzujeme jeho komponenty pomocí obrázku.
položka 1 | Před URL nemůže být žádné znaky |
položka 2 | Kontrolujeme povinnou předponu "http" |
položka 3 | Nesmí obsahovat žádné znaky |
položka 4 | Pokud existuje "s", pak URL odkazuje na zabezpečené připojení "https" |
položka 5 | Požadováno "//" |
položka 6 | Žádné znaky |
položka 7-9 | Validace doména první úrovně a přítomnost bodu |
10-13 | Kontrola správnosti psaní domény a bodu druhé úrovně |
Bod 14-17 | Struktura adresy URL je sada čísel, písmen, podtržítek, pomlček, teček a lomítka na konci |
Kontrola čísel kreditních karet
Úkol. Je třeba ověřit správnost zadaného čísla plastové karty nejběžnějšího platebního systému. Variant je zvažován pouze pro mapy Visa a MasterCard.
Řešení. Při vytváření výrazu musíte brát v úvahu možnou přítomnost mezer ve zadaném čísle. Čísla na mapě jsou rozdělena do skupin pro snadné čtení a diktování. Proto je zcela přirozené, že se člověk může pokusit zadat číslo tímto způsobem (to znamená pomocí mezer).
Napište univerzální výraz, který bere v úvahu možné mezery a spojovníky, je těžší než jen zrušení všech znaků kromě číslic. Proto ve výrazu doporučujeme použít / metacharacter D, který odstraní všechny znaky kromě číslic.
Nyní můžete přejít přímo na číslo ověření. Všechny společnosti, které vydávají kreditní karty, používají jedinečný formát čísel. V tomto příkladu se používá a klient nemusí zadávat název společnosti - je určen číslem. Vízové karty vždy začínají číslem 4 a mají délku 13 nebo 16 číslic. MasterCard začíná v rozmezí 51-55 s délkou čísla 16. V důsledku toho získáváme následující výraz:
Před zpracováním objednávky můžete provést dodatečnou kontrolu poslední číslice, která je vypočtena podle algoritmu Měsíc.
Kontrola telefonních čísel
Úkol. Zkontrolujte správnost zadaného telefonního čísla.
Řešení. Počet číslic v pevných a mobilních telefonních čísel se značně liší v závislosti na zemi, tak univerzálně zkontrolovat pomocí regulárních výrazů, telefonní číslo správně nemožné. Ale mezinárodní čísla mají přísný formát a dokonalou kontrolu vzor. Tím spíš, že stále více a více národní telefonní operátoři se snaží splnit stejné normy. Struktura pokoj je následující:
+CCC.NNNNNNNNNNxEEEE, kde:
- C je kód země tvořený 1-3 číslicemi.
- N - číslo až 14 číslic.
- E je volitelné rozšíření.
Plus je nepostradatelný prvek a znak x je přítomen pouze tehdy, je-li nutná expanze.
V důsledku toho máme následující výraz:
^ [0-9] {1,3} [0-9] {4,14} (a: x +)
Čísla v rozsahu
Úkol. Je nutné zajistit, aby celé číslo odpovídalo určitému rozsahu. Navíc je nutné, aby se regulární výrazy nacházely pouze z rozsahu hodnot.
Řešení. Zde jsou některé výrazy pro některé z nejčastějších případů:
Určete hodinu od 1 do 24 | ^ (1 [0-2] | [1-9]) $ |
Den v měsíci 1-31 | ^ (3 [01] | [12] [0-9] | [1-9]) $ |
Druhé nebo minutové 0-59 | ^ [1-5]? [0-9] $ |
Číslo od 1 do 100 | ^ (100 | [1-9] y [0-9]) $ |
Den roku 1-366 | [0-9] | [12] [0-9] {2} | [1-9] [0-9] |
Vyhledejte adresu IP
Úkol. Musíte určit, zda zadaný řetězec je platná adresa IP ve formátu IPv4 v rozsahu od 000.000.000.000-255.255.255.255.
Řešení. Stejně jako u nějakého úkolu v PHP má regulární výraz mnoho variant. Například toto:
Online test výrazů
Kontrola správných výrazů pro správnost programátorů může být obtížná kvůli složitosti syntaxe, která se liší od "normálních" programovacích jazyků. Chcete-li tento problém vyřešit, existuje mnoho online testovacích výrazů, které vám umožní snadno ověřit správnost vytvořené šablony v reálném textu. Programátor zadá výraz a data pro ověření a okamžitě vidí výsledek zpracování. Obvykle existuje také referenční část, kde jsou podrobně popsány regulární výrazy, příklady a implementační rozdíly pro nejběžnější programovací jazyky.
Ale plně důvěřovat výsledkům on-line služeb se nedoporučuje všem vývojářům, kteří používají PHP. Pravidelný výraz, písemný a ověřený osobně, zvyšuje kvalifikaci a zaručuje chybějící chyby.
- Seznam programovacích jazyků. Programovací jazyky nízké a vysoké úrovně
- Java: regulární výrazy, speciální znaky
- Parsing: co to je a jak je vytvořeno
- jаvascript, regulární výraz: příklady, kontrola regulárních výrazů
- Pravidelné výrazy (PHP). PHP: regulární výrazy, příklady
- PHP: regulární výrazy, funkční předpřipravit všechny
- Operátor přiřazení v "Pascalu": co je určeno, jaké akce jsou prováděny
- Historie vývoje programovacích jazyků: stručně o všem
- Význam frazeologie "jazyk bez kostí": rozumíme společně
- "Ačkoli míč se valí": význam frazeologie a historie jejího vzhledu
- jаvascript: práce s řetězci, funkcemi
- Aplikační software, klasifikace
- Použití metody replace ()
- Podmíněné příkazy if / else v jazyce Python: syntaxe a aplikace
- Hledání řádku v řetězci PHP: popis funkcí
- Poznámky regulárních výrazů: popis, nahrazení a příklady
- Syntaxe jаvascript parseInt: příklady použití
- Str.replace: příklady efektivního využití
- Syntaxe jаvascript parseInt: příklady použití
- Idiomatický výraz a jeho původ
- Nejjednodušší programovací jazyk pro začátečníky