ComputersProgrammering

PHP (regex) - wat is dat? Voorbeelden en het controleren van reguliere expressies

Bij het werken met tekst in elke moderne programmeertaal, ontwikkelaars voortdurend te voldoen aan de doelstellingen van de input validatie voor de naleving van het gewenste patroon, zoeken en vervangen testen fragmenten en andere vormen van verwerking vormen van het karakter informatie. Ontwikkel je eigen validatie algoritmen leidt tot verlies van tijd, de code compatibiliteit en complexiteit in de ontwikkeling en modernisering.

De snelle ontwikkeling van het internet en web-design talen vereist het aanmaken van veelzijdige en compacte middel van tekstverwerking met een minimum bedrag dat nodig is voor deze code. Het is geen uitzondering en is populair bij beginners en professionele ontwikkelaars van PHP taal. De reguliere expressie taal als de tekst templates om de taak van de tekst de behandeling te vereenvoudigen en code te verminderen voor tientallen en honderden lijnen. Veel problemen kunnen niet worden opgelost helemaal zonder.

Reguliere expressies in PHP

PHP taal heeft drie mechanismen voor het werken met reguliere expressies - «ereg», «mb_ereg» en «preg». De meest voorkomende is de interface «preg», waarvan de functies bieden toegang tot de bibliotheek van de PCRE ondersteuning voor reguliere expressies, oorspronkelijk ontwikkeld voor de Perl taal, die is opgenomen in de PHP-pakket. Preg-zoekende functies in een bepaalde tekenreeks aanpassing, volgens een bepaald patroon in de taal van reguliere expressies.

syntax Basics

Als onderdeel van een kort artikel is het onmogelijk om te beschrijven in detail de gehele reguliere expressie syntax, want dit is er een speciale literatuur. Presenteren wij maar de belangrijkste elementen om de mogelijkheden voor ontwikkelaars te laten zien en begrijpen van de code voorbeelden.

In PHP reguliere expressie wordt formeel gedefinieerd erg moeilijk, en dus de beschrijving te vereenvoudigen. Een reguliere expressie is een tekenreeks. Het bestaat uit een speciale separator matrijs en de modificator aangeven hoe om te gaan. Eventueel in de verschillende alternatieven en herhalingen van patronen.

Bijvoorbeeld, de expressie / \ d {3} - \ d {2} - \ d {2} / m verdeler "/", gevolgd door de matrijs, en het symbool «m» is de modificator.

Al het vermogen van een reguliere expressie wordt gecodeerd met behulp van meta-tekens. De voertaal metateken is de backslash - "\". Het verandert het soort karakters aan de andere (bijv. E. Omgerekend naar een gewoon karakter wildcard en vice versa). Een ander belangrijk metateken is een rechte lijn «|», geeft de alternatieve template. Meer voorbeelden van meta-karakters:

^ Start object of een string
( start subpatroon
) end subpatroon
{ Start quantifier
} end quantifier
\ d decimaal cijfer 0-9
\ D elk teken dat geen getal is
\ s lege symbool, spatie, tab,
\ w symbooldictionaire

PHP, de verwerking van reguliere expressies, ruimte beschouwd als een afzonderlijke geldig teken, zodat de expressie van XYZ en ABC WAAR zijn verschillend.

subpatronen

In PHP reguliere subpatronen tussen haakjes, en ze worden soms "subuitdrukkingen". Voer de volgende functies:

  1. Toewijzing alternatieven. Bijvoorbeeld, de warmte-patroon (iets | Vogel |) samenvalt met de woorden "warmte", "Firebird" en "hot". En zonder de haakjes het zal alleen een lege string, "vogel" en "hot" zijn.

  2. "Spectacular" subpatroon. Dit betekent dat als het patroon overeenkomende subtekenreeks, dan worden alle wedstrijden. Voor de duidelijkheid geven we een voorbeeld. Gegeven de volgende reguliere expressie: de winnaar krijgt ((gold | verguld) (medal | cup)) - en de string voor wedstrijden, "de winnaar krijgt een gouden medaille." In aanvulling op de eerste zin, worden de zoekresultaten worden uitgegeven: "Gold Medal", "medailles", "goud".

Operators herhalingen (kvadrifikatory)

Bij het samenstellen van de reguliere expressie is vaak nodig om de herhaling van cijfers en symbolen te analyseren. Dit is geen probleem, als niet veel herhalingen. Maar wat te doen als we niet hun exacte aantal weten? In dit geval is het noodzakelijk om speciale metacharacters gebruiken.

Voor een beschrijving van herhalingen gebruikt kvadrifikatory - metacharacters het nummer in te voeren. Kvadrifikatory zijn twee soorten:

  • gemeenschappelijk tussen haakjes;
  • verminderd.

Gemiddelde quantifier geraakt door de minimum en maximum aantal toegestane herhalingen element in de vorm van twee getallen in de beugels, bijvoorbeeld x {2,5}. Indien het maximum aantal herhalingen niet bekend is, wordt het tweede argument gespecificeerd: x {2}.

Afgekorte telwoorden zijn symbolen voor de meest voorkomende herhalingen om onnodige overbelasting syntax voorkomen. Meestal zijn er drie bezuinigingen:

1. * - nul of meer herhalingen, wat overeenkomt met {0}.

2. + - één of meer herhalingen, dat wil zeggen, {1} ...

3.? - geen of slechts een herhaling - {0,1}.

Voorbeelden van reguliere expressies

Voor degenen die reguliere expressies, voorbeelden leren - de beste leerboek. We geven een paar die hun mogelijkheden te laten zien met een minimum aan inspanning. Alle code is volledig compatibel met versies van PHP 4.x en hoger. Om volledig te begrijpen van de syntaxis en het gebruik van alle taalfuncties adviseren wij het boek van J .. Friedl, "reguliere expressies", die volledig in de overwegingen syntax, en er zijn voorbeelden van reguliere expressies niet alleen PHP, maar ook voor een Python, Perl, MySQL, Java, Ruby, en C #.

Validation E-mailadres

Taak. Er is een internet pagina waarop de bezoeker wordt gevraagd adres e-mail. Reguliere expressie moet de juistheid van de adressen te controleren voordat het verzenden van berichten. Controleer garandeert niet dat de opgegeven mailbox daadwerkelijk bestaat en ontvangt berichten. Maar onkruid uit kennelijk verkeerd adressen het kan.

Besluit. Zoals met elke programmeertaal, in PHP reguliere expressie e-mailadres verificatie kan worden op verschillende manieren uitgevoerd, en de voorbeelden in dit artikel zijn niet de finale en enige keuze. Daarom is in elk geval, zullen wij een lijst van eisen dat rekening moet worden gehouden bij de programmering en de specifieke implementatie is volledig afhankelijk van de ontwikkelaar te bieden.

Zo is de uitdrukking die een geldig e-test moeten de volgende voorwaarden te controleren:

  1. De aanwezigheid basisplaats het symbool @, en er geen openingen.
  2. Het domein deel van het adres van het @ -symbool, bevat alleen geldige tekens voor domeinnamen. Hetzelfde geldt voor de naam van de gebruiker.
  3. Bij het controleren van de gebruikersnaam moet de aanwezigheid van speciale lettertekens zoals een apostrof of verticale lijn. Dergelijke symbolen zijn potentieel gevaarlijk en kunnen in dergelijke vormen van aanvallen die SQL-injectie. Vermijd adressen.
  4. gebruikersnamen staan slechts één punt, die de eerste of laatste teken in de reeks kan zijn.
  5. De domeinnaam moet ten minste twee en niet meer dan zes tekens bevatten.

Bijvoorbeeld, rekening houdend met al deze voorwaarden is te zien in de volgende figuur.

Validatie van een URL

Taak. Controleer of de opgegeven tekenreeks een geldig adres URL. Nogmaals, we merken dat reguliere expressies URL-controle op verschillende manieren kan worden geïmplementeerd.

Besluit. Onze laatste versie is als volgt:

/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .-] *) * \ /? $ /

Analyseer nu zijn componenten in meer detail met behulp van de tekening.

volgens conclusie 1 Voordat de URL geen tekens zou moeten hebben
Claim 2 Controleer de aanwezigheid van de verplichte voorvoegsel «http»
punt 3 Er mogen geen symbolen
Claim 4 Als er «s», de URL verwijst naar een beveiligde verbinding «https»
conclusie 5 Verplichte gedeelte van de "//"
Claim 6 geen tekens
p. 7-9 Verifiëren van het eerste level domein en de aanwezigheid van punt
p.10-13 Het verifiëren van het domein van het schrijven van het tweede niveau en het punt
p.14-17

Bestandsstructuur URL - een set van cijfers, letters, underscores, streepjes, stippen, en een schuine streep aan het einde

Controleer de credit card-nummers

Taak. U moet de validatie van de ingevoerde credit card nummer van de meest voorkomende betaling systemen te implementeren. Een variant alleen voor kaarten Visa en MasterCard.

Besluit. Bij het maken van de uitdrukking die u nodig hebt om rekening te houden met de mogelijke aanwezigheid van gaten in de ingang kamer. De cijfers op de kaart zijn verdeeld in groepen voor een betere leesbaarheid en dicteren. Daarom is het logisch dat een persoon kan proberen om een nummer in te voeren op deze manier (bijv. E. Het gebruik van spaties).

Schrijf een universele uitdrukking die rekening houdt met de mogelijke spaties of koppeltekens, is ingewikkelder dan simpelweg alle tekens te verwijderen behalve cijfers. Daarom raden wij u aan een wildcard uitdrukking / D, waarin alle tekens verwijdert, behalve cijfers.

Nu kunt u direct naar de check-nummer. Alle bedrijven, uitgevers van kredietkaarten maken gebruik van een uniek nummer formaat. In het voorbeeld wordt gebruikt, en de klant niet nodig om de naam van het bedrijf in te voeren - het is bepaald door het aantal. Visa-kaarten beginnen altijd met de nummers 4 en hebben een lengte van 13 of 16 cijfers. MasterCard begint in het bereik van 51-55 met een lang nummer 16. Als gevolg daarvan krijgen we de volgende uitdrukking:

Alvorens tot bestelling kan verder de laatste cijfers van het nummer, dat wordt berekend op Luhn algoritme te testen.

Het verifiëren van telefoonnummer

Taak. Het controleren van de juistheid van de ingevoerde telefoonnummer.

Besluit. Het aantal cijfers in de vaste en mobiele telefoonnummers variëren aanzienlijk afhankelijk van het land, zo universeel controleren met behulp van reguliere expressies, telefoonnummer juist onmogelijk. Maar internationale nummers hebben een strikt formaat en perfect voor het controleren van het patroon. Nog meer zodat meer en meer nationale telefoon operators proberen om dezelfde standaard te voldoen. Kamer is als volgt:

+ CCC.NNNNNNNNNNxEEEE, waarbij:

- C - is de landencode uit 1-3 cijfers.

- N - nummer maximaal 14 cijfers.

- E - optionele verlenging.

Plus is een onmisbaar element, en het teken X alleen aanwezig wanneer nodig verlenging wordt aangevraagd.

Als gevolg daarvan hebben we de volgende uitdrukking:

^ \ + [0-9] {1,3 } \ [0-9] {4,14}. (:?. X +)? $

De getallen in het bereik

Taak. Er moet samenvallen integer een bepaald bereik te garanderen. Daarnaast is het noodzakelijk om een reguliere expressie alleen de nummers uit het assortiment te vinden.

Besluit. Hier zijn een paar uitingen om een aantal van de meest voorkomende gevallen:

Bepaal uur 1-24 ^ (1 [0-2] | [1-9]) $
Dag in de maand 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
Seconden of minuten 0-59 ^ [1-5] [0-9] $
Een nummer 1-100 * (100 |? [1-9] [0-9]) $
Dag van het jaar 1-366 ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $

Zoek IP-adressen

Taak. Het is noodzakelijk om te bepalen of een gegeven string is een geldig IP-adres in IPv4-formaat in het bereik van 000.000.000.000-255.255.255.255.

Besluit. Zoals bij elk probleem in de taal van PHP, de reguliere expressie heeft vele varintov. Bijvoorbeeld deze:

Online controle van uitdrukkingen

Controleer regex juist voor beginners kan moeilijk zijn als gevolg van de complexiteit van de syntax, die verschilt van "gewone" programmeertalen. Om dit probleem op te lossen, zijn er vele online testers uitdrukkingen die het gemakkelijk maken om de juistheid van de sjabloon die u in de echte tekst gemaakt controleren. De programmeur komt de expressie en verificatiegegevens en direct zien het resultaat van de verwerking. Meestal is er presenteren een referentie sectie, die de reguliere expressies, voorbeelden en verschillen uitvoeringsdetails voor de meest uitgebreide talen.

Maar om volledig vertrouwt online diensten resultaten niet aanbevolen voor alle ontwikkelaars die PHP gebruiken. Een reguliere expressie is geschreven en geverifieerd in persoon, verhoogt kwalificatie en staan garant voor de afwezigheid van fouten.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 nl.unansea.com. Theme powered by WordPress.