Wyrażenia regularne

W tym artykule zajmiemy się często używanymi wyrażeniami regularnymi. Nie będe pisał jak się je tworzy, po prostu tu będe umieszczał wszystkie, z których ja korzystam. Przydadzą się na pewno one do walidacji formularzy, ale i nie tylko dodam także kilka, dzięki, którym będzie można wyjąc jakieś dane ze stron.

Wyrażenia regularne - obsługa w PHP

W PHP 5 posiadamy kilka metod, które pozwalają nam na używanie wyrażeń regularnych, ja w przykładach będe używał tylko tych najpopularniejszych, czyli preg_match, preg_match_all, preg_replace, preg_replace_callback.

  • preg_match - funkcja pozwala na przyrównanie ciągu znaków do wzorca, pierwszy argument to wzorzec, drugi zaś ciąg znaków. Posiada ona dwa opcjonalne parametry, ale są one nam zbędne, dlatego jeżeli komuś nie wystraczają podstawowe, odsyłam do dokumentacji. Funckja zwraca nam logiczne false w przypadku błędu lub ilość powtórzeń.
  • preg_match_all - funkcja pozwala nam na wyciągnięcie z ciągu znaków wszystkich powtórzeń danego wzorca. Pierwszy argument to wzorzec, drugi przeszukiwany ciąg znaków, natomiast trzeci to zmienna w której będa przechowywane wyniki. Funkcja zwraca nam logiczne false w przypadku błędu lub ilość znalezionych powtórzeń. Dokumentacja.
  • preg_replace - funkcja wyszukuje wzorzec(pierwszy argument) w zadanym ciągu znaków(trzeci argument) i zastępuje go wzorcem z drugiego argumentu. Funkcja w razie poprawnego wykonania zwraca nam zmieniony tekst lub w przypadku błędu niezmieniony lub typ pusty - null.Dokumentacja.
  • preg_replace_callback - funkcja działa podobnie do preg_replace z tą różnicą, że w przypadku znalezienia powtórzenia wzorca całą operacje podmiany przekazuje funkcji, która jest podawana jako drugi argument. Dokumentacja

Wszystkie funkcje przyjmują również inne dodatkowe parametry, które jednak będa nam zbędne do przykładów.

Wzorce

sprawdzanie poprawności adresu email

#^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$#i, przykład:

<?php
$ciag
='masiakla@domena.pl';
if(
preg_match('#^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$#i',$ciag) {
    echo 
'poprawny';
} else {
    echo 
'niepoprawny';
}
?>

wyszukanie adresów www

#(https?)://(([a-z0-9-]+\.)+[a-z]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?(/?|/\S+)#Uix, przykład:

<?php
$ciag
='sadas sadasd <a href="http://www.mephir.net.pl" title="http://www.mephir.net.pl">http://www.mephir.net.pl</a> sdas sadas sd asd';
if(
preg_match_all('#(https?)://(([a-z0-9-]+\.)+[a-z]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?(/?|/\S+)#Uix',$ciag$match) {
    
print_r($match);
}
?>

poprawność wprowadzonego numeru nip w postaci aaa-bb-cc-ddd

#^[\d]{3}-[\d]{2}-[\d]{2}-[\d]{3}$#, przykład:

<?php
$ciag
='4992-1-65-123';
if(
preg_match('#^[\d]{3}-[\d]{2}-[\d]{2}-[\d]{3}$#',$ciag) {
    echo 
'poprawny';
} else {
    echo 
'niepoprawny';
}
?>

pogrubianie wszystkich nr telefonów postaci nrkier-czesc1-czesc2(pasuje 094-3166-189, nie pasuje 094-316-61-89

#[\d]{3}-[\d]{4}-[\d]{3}#, przykład:

<?php
$ciag
='asfdadsfafsafsad 094-3166-189 sad 094-316-61-89 sadf cvcx 094-3166-189 bcxb';
echo 
preg_replace('#([\d]{3}-[\d]{4}-[\d]{3})#','<b>$1</b>',$ciag);
?>

prosty bbcode

#\[[b|u|i]{1}](.+)\[/[b|u|i]]#is, przykład:

<?php
$ciag
='to jest przykładowy tekst z użyciem [b]bbcode[/b], możemy w nim [b]pogrubiać[/b], [i]przechylać[/i], [u]podkreślać[/u] oraz łączyć [u][i][b]wszystkie tagi[/b][/i][/u]';

function 
parse_bbc($wejscie){
    if(
is_array($wejscie)){
        
$wyjscie=preg_replace("#\[([b|u|i]{1})](.+)\[/[b|u|i]]#is","<$1>$2</$1>",$wejscie[0]);
    }
    return 
preg_replace_callback("#\[([b|u|i]{1})](.+)\[/[b|u|i]]#is",'parse_bbc',$wyjscie);
}

echo 
parse_bbc($ciag);
?>

To wyrażenie nie jest najlepszym co prawda sposobem zamiany bbcode na tagi html, ale w prostych rozwiązaniach wystarczy, ponieważ nie sprawdza ono czy tag rozpoczęty [b] kończy się również [/b], a nie np. [u].

== to be continued ==

Your rating: Brak Ocena: 5 (1 vote)

Dzięx za wyszukiwanie adr.

Dzięx za wyszukiwanie adr. www.
red. Janusz Micach

Dodaj nową odpowiedź

Zawartość pola nie będzie udostępniana publicznie.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Znaki końca linii i akapitu dodawane są automatycznie.
  • You can use the <go> tags just like the <a> for nicer urls.

Więcej informacji na temat formatowania