<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>&#60;?blog &#187; regexp</title>
	<atom:link href="https://blog.visionsoftware.pl/tag/regexp/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.visionsoftware.pl</link>
	<description>...nie tylko o programowaniu</description>
	<lastBuildDate>Sun, 23 Mar 2014 19:23:43 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Wyrażenia regularne w MySQL</title>
		<link>https://blog.visionsoftware.pl/bazy-danych/wyrazenia-regularne-w-mysql.html</link>
		<comments>https://blog.visionsoftware.pl/bazy-danych/wyrazenia-regularne-w-mysql.html#comments</comments>
		<pubDate>Thu, 06 Jan 2011 14:33:42 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[Bazy danych]]></category>
		<category><![CDATA[like]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[wyrażenia regularne]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=132</guid>
		<description><![CDATA[Raz na jakiś czas zachodzi potrzeba wyszukania w bazie danych w określonym formacie.  Często wystarcza do tego celu zwykłe LIKE, jednak konstrukcja taka nie pomoże w bardziej skomplikowanych przypadkach. Wtedy warto skorzystać z REGEXP, dzięki czemu wykorzystamy możliwości wyrażeń regularnych. Podstawowym sposobem na wyszukiwania według określonego formatu jest w MySQL konstrukcja LIKE. Możemy w niej skorzystać z następujących konstrukcji: _ &#8211; każdy pojedynczy znak % &#8211; wiele dowolnych znaków (włączając w to ich brak) Przykładowe [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Raz na jakiś czas zachodzi potrzeba wyszukania w bazie danych w określonym formacie.  Często wystarcza do tego celu zwykłe LIKE, jednak konstrukcja taka nie pomoże w bardziej skomplikowanych przypadkach. Wtedy warto skorzystać z REGEXP, dzięki czemu wykorzystamy możliwości wyrażeń regularnych.<span id="more-132"></span></p>
<p>Podstawowym sposobem na wyszukiwania według określonego formatu jest w MySQL konstrukcja LIKE. Możemy w niej skorzystać z następujących konstrukcji:</p>
<ul>
<li>_ &#8211; każdy pojedynczy znak</li>
<li>% &#8211; wiele dowolnych znaków (włączając w to ich brak)</li>
</ul>
<p>Przykładowe zapytanie:</p>
<pre class="brush: sql; title: ; notranslate">select x from tabela where y like &quot;a_cd%h&quot;;</pre>
<p>zwróci wszystkie rekordy, dla których kolumna “x” rozpoczyna się od znaku &#8222;a&#8221;, po którym występuje jeden dowolny znak, następnie ciąg &#8222;cd&#8221;, nieokreślona liczba dowolnych znaków i na końcu znak &#8222;h&#8221;.</p>
<p>Takie wyszukiwania są jednak mocno ograniczone, często potrzebujemy wyboru bardziej szczegółowego formatu. Z pomocą mogą tu przyjść wyrażenia regularne, z którym możemy korzystać w MySQL poprzez konstrukcje REGEXP oraz NOT REGEXP (lub ich synonimy RLIKE oraz NOT RLIKE). W MySQL obowiązuje format Perla, czyli na przykład:</p>
<pre class="brush: sql; title: ; notranslate">select * from tabela where pole regexp '^[a-c]{1,3}X[0-9]*';</pre>
<p>Wyrażenia regularne w MySQL mogą zawierać następujące konstrukcje:</p>
<ul>
<li>^ &#8211; wyrażanie regularne rozpoczyna się od zdefiniowanego wzorca, np. ^x oznacza dowolny ciąg zaczynający się od znaku &#8222;x&#8221;</li>
<li>$ &#8211; wyrażanie regularne kończy się na zdefiniowanym wzorcu, np. x$ oznacza dowolny ciąg kończący się znakiem &#8222;x&#8221;</li>
<li>. &#8211; dowolny pojedynczy znak</li>
<li>* &#8211; zero lub więcej znaków, po jakim została umieszczona gwiazdka, np. x* oznacza dowolną liczbę wystąpień litery &#8222;x&#8221;, [0-9]* oznacza dowolną liczbę wystąpień jakiejkolwiek cyfry, (abc)* dowolną liczbę wystąpień ciągu &#8222;abc&#8221;, natomiast .* dowolny ciąg znaków</li>
<li>+ &#8211; jedno lub więcej wystąpienie określonego ciągu po jakim został umieszczony +, np. x+ oznacza jeden lub więcej &#8222;x&#8221;, [a-c]+ oznacza jedną lub więcej literę a, b lub c</li>
<li>? &#8211; zero lub jedno wystąpienie poprzedzającego znaku, np. x? oznacz zero lub jedno wystąpienie znaku &#8222;x&#8221;</li>
<li>[..] &#8211; zakres znaków, np. [a-zA-GXYZ5-9] oznacza wszystkie małe litery, duże od A do G oraz X, Y, Z, cyfry od 5-9. Można stosować zaprzeczenie poprzez ^, np. [^3-5] oznacza wszystkie ciągi, które nie zawierają liczb 3, 4 oraz 5.</li>
<li>| &#8211; logiczne lub, np. abc|def oznacza ciąg abc lub def</li>
<li>{n}, {n, m} &#8211; określa liczbę wystąpień poprzedzającego wyrażenia, np. a{4} oznacza znak &#8222;a&#8221; występujący dokładnie 4 razy, [a-c]{2,3} oznacza znak a, b lub c występujący od 2 do 3 razy. Można także stosować konstrukcję {0,}, która jest tożsama z operatorem * oraz {1,}, który oznacza to samo co +</li>
</ul>
<p>Aby użyć znaku specjalnego (+, -, *, &amp;, itp) musimy posłużyć się podwójnymi slashami. Przykładowo, aby odnaleźć ciąg 1+2 należy zastosować wyrażenie regularne w postaci 1\\+2.</p>
<p>Znaki w wyrażaniach regularnych możemy pisać wprost ([abc], \\+, \\’ itp.) lub stosując specjalną konstrukcję w postaci [.znaki.] . Przykładowo, aby znaleźć ciągi zawierające tyldę możemy posłużyć się zapytaniami:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT x FROM tabela REGEXP '\\~';
SELECT x FROM tabela REGEXP '[[.~.]]';
SELECT x FROM tabela REGEXP '[[.tilde.]]';

</pre>
<p>Tego typu zapisów jest dość sporo, przykładowe to:</p>
<ul>
<li>newline &#8211; nowa linia \n</li>
<li>tab &#8211; tabulacja \t</li>
<li>apostrophe &#8211; pojedynczy apostrof ‚</li>
<li>carriage-return &#8211; znak powrotu karetki \r</li>
<li>plus-sign &#8211; znak &#8222;plus&#8221; +</li>
</ul>
<p>Można także stosować klasy znaków, zawierające okresloną grupę wzorców. Na przykład [:alnum:] oznacza wszystkie znaki alfanumeryczne. Inne możliwości są następujące:</p>
<ul>
<li>alnum &#8211; znaki alfanumeryczne</li>
<li>alpha &#8211; litery alfabetu</li>
<li>blank &#8211; białe znaki</li>
<li>cntrl &#8211; znaki kontrolne</li>
<li>digit &#8211; cyfry</li>
<li>graph &#8211; znaki graficzne</li>
<li>lower &#8211; małe litery alfabetu</li>
<li>print &#8211; znaki graficzne lub spacje</li>
<li>punct &#8211; znaki interpunkcyjne</li>
<li>space &#8211; spacja, tabulacja, znak nowej linii oraz powrotu karetki</li>
<li>upper &#8211; duże litery alfabetu</li>
<li>xdigit &#8211; znaki heksadecymalne</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://blog.visionsoftware.pl/bazy-danych/wyrazenia-regularne-w-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Walidacja i satynizacja z filter_var()</title>
		<link>https://blog.visionsoftware.pl/programowanie-php/walidacja-i-satynizacja-z-filter_var.html</link>
		<comments>https://blog.visionsoftware.pl/programowanie-php/walidacja-i-satynizacja-z-filter_var.html#comments</comments>
		<pubDate>Sun, 12 Dec 2010 22:13:34 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[filter_var]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[walidacja]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=43</guid>
		<description><![CDATA[Sprawdzanie poprawności danych to nieodzowny element każdej strony internetowej. Wszędzie tam, gdzie prosimy użytkownika o wprowadzenie danych, musimy być bardzo ostrożni. Należy określić, czy nie popełnił błędu podczas wpisywania, oraz dodatkowo zabezpieczyć się przed użyciem niepożądanych wyrażeń mogących prowadzić na przykład do SQL lub Java Script Injection.Takie dane jak email lub adres WWW najlepiej sprawdzać przy pomocy wyrażeń regularnych, czyli np. funkcji preg_match(), a dane &#8222;oczyszczać&#8221; przy pomocy strip_tags, int_val lub podobnych. Od PHP 5.2 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Sprawdzanie poprawności danych to nieodzowny element każdej strony internetowej. Wszędzie tam, gdzie prosimy użytkownika o wprowadzenie danych, musimy być bardzo ostrożni. Należy określić, czy nie popełnił błędu podczas wpisywania, oraz dodatkowo zabezpieczyć się przed użyciem niepożądanych wyrażeń mogących prowadzić na przykład do SQL lub Java Script Injection.<span id="more-43"></span>Takie dane jak email lub adres WWW najlepiej sprawdzać przy pomocy wyrażeń regularnych, czyli np. funkcji preg_match(), a dane &#8222;oczyszczać&#8221; przy pomocy strip_tags, int_val lub podobnych. Od PHP 5.2 mamy jednak do dyspozycji jeszcze jedno dobre narzędzie &#8211; funkcję filter_var().</p>
<p>Dzięki niej możemy sprawdzić poprawność różnych danych, oraz przefiltrować je w celu pominięcia określonych znaków. Wszystko w postaci jednego, krótkiego polecenia.</p>
<p>Przykładowo, aby sprawdzić poprawność adresu email. Wystarczy, że użyjemy następującego polecenia:</p>
<pre class="brush: php; title: ; notranslate">filter_var('mail@server.com', FILTER_VALIDATE_EMAIL);</pre>
<p>Funkcja filter_var zwróci testowaną zmienną jeśli jest ona poprawna, lub false w przypadku, gdy jest błędna.</p>
<p>Istnieje możliwość przeprowadzania wielu innych testów:<br />
FILTER_VALIDATE_BOOLEAN – zwraca true dla &#8222;1&#8243;, &#8222;true&#8221;, &#8222;on&#8221; lub &#8222;yes&#8221;, false dla pozostałych wartości. Po zastosowaniu flagi FILTER_NULL_ON_FAILURE zwraca false tylko dla for &#8222;0&#8243;, &#8222;false&#8221;, &#8222;off&#8221;, &#8222;no&#8221; i “”. Jeśli testowana zmienna nie jest boolean, zwraca NULL.<br />
FILTER_VALIDATE_FLOAT – sprawdza, czy parametr jest liczbą zmiennoprzecinkową<br />
FILTER_VALIDATE_INT – sprawdza, czy parametr jest liczbą całkowitą<br />
FILTER_VALIDATE_IP – sprawdza poprawność adresu IP. Można zastosować flagi zawężające test do protokołu IPv4, IPv6, adresów prywatnych lub zarezerwowanych<br />
FILTER_VALIDATE_REGEXP – do używania wyrażeń regularnych (Pearl)<br />
FILTER_VALIDATE_URL – sprawdzanie poprawności adresu URL</p>
<p>Przy użyciu funkcji filter_var() można także „oczyścić” dane z niepożądanych znaków. Poniższy kod usunie zezmiennej $var wszystko poza cyframi oraz znakiem +/-</p>
<pre class="brush: php; title: ; notranslate">$var_clean = filter_var($var, FILTER_SANITIZE_NUMBER_INT);</pre>
<p>Lista innych możliwości jest całkiem długa, przy pomocy innych parametrów możemy dodawać slashe do ciągów, usuwać niepożądane znaki z adresów e-mail, ciągów znaków, adresów URL itd. Istnieje możliwość używania flag, które dodatkowo rozszerzają możliwość filtrów.</p>
<p>Oprócz filter_var() istnieją także inne funkcje związane z filtrowaniem danych. Umożliwiają one bezpośrednie filtrowanie zmiennych $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV oraz własnych tablic. Szczegóły można znaleźć w <a href="http://pl.php.net/manual/en/function.filter-input.php" target="_blank">dokumentacji</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.visionsoftware.pl/programowanie-php/walidacja-i-satynizacja-z-filter_var.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
