Asynchroniczne interfejsy

Podobne dokumenty
Walidacja danych w ASP.NET MVC

Spra r wd w za z nie e popra r wn w ości c danych c w w form r u m larz r a z ch c :

5 AS SP.NET MVC. Walidacja danych. Zaawansowane programowanie internetowe Instrukcja nr 5

Modele danych walidacja widoki zorientowane na model

4 AS SP.NET MVC. Widok. Zaawansowane programowanie internetowe Instrukcja nr 4

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

Ćwiczenie 8. Kontrolki serwerowe

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość).

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Polcode Code Contest PHP-10.09

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Zasady programowania Dokumentacja

Walidacja po stronie serwera Walidacja po stronie klienta:

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Bazy Danych i Usługi Sieciowe

1. Podstawy budowania wyra e regularnych (Regex)

Języki i metodyka programowania. Wprowadzenie do języka C

Wyrażenia regularne. Wyrażenia regularne 1/41

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHNICZNA 1

Wyrażenia regularne. Wyrażenia regularne: składnia

Kiedy i czy konieczne?

lekcja 8a Gry komputerowe MasterMind

Matematyczne Podstawy Informatyki

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Języki formalne i automaty Ćwiczenia 6

Język C++ wykład VIII

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Oczywiście plik musi mieć rozszerzenie *.php

1 Podstawy c++ w pigułce.

INFORMATYKA Studia Niestacjonarne Elektrotechnika

I znowu można jak w C, za pomocą starych struktur i metod:

Wykład 12. Programowanie serwera MS SQL 2005 w C#

FUNKCJE TEKSTOWE W MS EXCEL

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Technologie Internetowe Raport z wykonanego projektu Temat: Internetowy sklep elektroniczny

Projektowanie aplikacji WWW w Frejmworku ASP.NET MVC 4.0

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Zakład Usług Informatycznych OTAGO

Wyrażenia regularne. Regular expressions. aka. Regexp

Laboratorium 10 - Web Services

Laboratorium 10: Maszyna stanów

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

ŁAŃCUCHY W JĘZYKU C/C++

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Programowanie komputerowe. Zajęcia 1

Dokumentacja serwera REST do obsługi rezerwacji w systemie SaNAtoRIUm.pro

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Wstęp do informatyki 2011/2012. Wyrażenia regularne (sed)

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Microsoft IT Academy kurs programowania

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Baza danych do przechowywania użytkowników

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Przydatne sztuczki - sql. Na przykładzie postgres a.

Języki programowania obiektowego Nieobiektowe elementy języka C++

Zmienne, stałe i operatory

Podstawy Programowania Podstawowa składnia języka C++

Podstawy programowania w języku C++

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Języki formalne i automaty Ćwiczenia 1

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Definiowanie języka przez wyrażenie regularne(wr)

Paweł Cieśla. Dokumentacja projektu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Wykład 2 Składnia języka C# (cz. 1)

Pliki wykład 2. Dorota Pylak

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

EGZAMIN MATURALNY Z INFORMATYKI

Transkrypt:

Asynchroniczne interfejsy Walidacja danych WWW mgr inż. Rafał Grycuk mgr inż. Patryk Najgebauer Strona służbowa: http://iisi.pcz.pl/~rgrycuk/ Kontakt: rafal.grycuk@iisi.pcz.pl Konsultacje: Środa, godz. 12-14

Agenda 1. Co to jest Walidacja danych?, 2. Wyrażenia regularne, 3. Wyrażenia regularne w JavaScript. 4. Walidacja danych po stronie serwera.

Walidacja danych Walidacja danych polega na sprawdzaniu poprawności danych wejściowych. Walidujemy dane w celu wyeliminowania: błędów użytkownika np. źle podany pesel, kod pocztowy; danych niezgodnych z regulaminem np. wulgaryzmy, odnośniki do konkurencyjnych stron; treści szkodliwych dla strony np. skrypty JavaScript, zapytania SQL;

Walidacja danych Wszystkie informacje trafiające od użytkownika na serwer są przesyłane w formie tekstowej, więc należy sprawdzić co dokładnie przyszło od klienta. Walidując parametry: typów prostych (int, float) możemy je prasować dzięki gotowym metodom. typów niestandardowych (adres,email) musimy skorzystać z wyrażeń regularnych. Istnieją również dane jak numery NIP, PESEL posiadające wartości kontrolne. Natomiast w tekstach występują też potrzeby usuwania słów niepożądanych metodą słownikową.

Wyrażenia regularne Są to wzorce opisujące łańcuchy znaków. Możemy za ich pomocą wyszukać, pociąć lub porównać dane wejściowe pasujące do naszego wzorca. Przykładowo poniższe wyrażenie regularne będzie pasować do kodów pocztowych np. 42-200 ^([0-9]{2}-[0-9]{3})$

^([0-9]{2}-[0-9]{3})$ - łańcuch na wejściu musi być zgodny od początku do końca z wyrażeniem regularnym. ^([0-9]{2}-[0-9]{3})$ - odnosi się do dwóch początkowych cyfr kodu pocztowego. ^([0-9]{2}-[0-9]{3})$ - określa zbiór znaków od 0 do 9. ^([0-9]{2}-[0-9]{3})$ - muszą wystąpić 2 znaki zgodne ze zbiorem. ^([0-9]{2}-[0-9]{3})$ - znak myślnika w kodzie pocztowym. ^([0-9]{2}-[0-9]{3})$ - trzy ostatnie cyfr kodu pocztowego.

Grupowanie wyrażeń alternatywa. ( ) grupowanie wyrażań regularnych (?: ) grupowanie bez zapamiętywania wyniku \n - referencja do zapamiętanej grupy (back references) liczonej od początku. Łańcuch pod referencją musi być zgodny z łańcuchem z grupy na którą jest wskazanie.

Grupowanie wyrażeń przykłady wyszukiwania (12 21)abc wyrażenie zgodne z łańcuchami 12abc lub 21abc (12 21)abc\1 wyrażenie zgodne z łańcuchami 12abc12 lub 21abc21 (4 (?:5 6))(12 21)abc\2 bez grupowania (?: referencja \2 mogła by odwoływać się do dwóch różnych grup.

Asercja przetwarzanie warunkowe Asercja pozwala badać otoczenie szukanego łańcucha znaków przy jednoczesnym nie włączaniu ich do rezultatu. (?= ) Asercja zstępna pozytywna (?! ) Asercja zstępna negatywna (?<= ) Asercja wstępna pozytywna (?<! ) Asercja wstępna negatywna

Asercja - przykłady (?<=12 21)abc wyrażenie zgodne z łańcuchami abc poprzedzonymi 12 lub 21 (?<=12 21)abc(?=12 21) wyrażenie zgodne z łańcuchami abc otoczonymi 12 lub 21 (?<=(12 21))abc(?=12 21)(?!\1) wyrażenie zgodne z łańcuchami abc otoczonymi 12 lub 21 różnymi od siebie

Klasy znaków Klasy pozwalają określić zbiory znaków jakie mogą wystąpić w szukanym łańcuchu. [abcd] klasa zbioru znaków zgodnych. [^abcd] klasa zbioru znaków niezgodnych. [a-z] - zakres znaków zgodnych z wzorcem.

Klasy znaków - przykłady (?<=[ +])abc(?=[,0-9]) wyrażenie pasujące do łańcucha abc otoczonego z lewej spacją lub + oraz z prawej spacją,, i znakami od 0 do 9. (?<=[^-0-9]) [0-9] [0-9]-[0-9] [0-9] [0-9] (?![-0-9]) wyrażenie pasujące do kodów pocztowych nie otoczonych znakami - oraz znakami od 0 do 9.

Liczeności {n} dokładnie n powtórzeń {n,} co najmniej n powtórzeń {n,m} od n do m powtórzeń * - zero lub więcej powtórzeń ( {0,} ). + - jedno lub więcej powtórzeń ( {1,} ).? - zero lub jedno powtórzeń ( {0,1} ). {n,}? co najmniej n powtórzeń ale jak najmniej {n,m}? od n do m powtórzeń, ale jak najmniej *? - zero lub więcej powtórzeń ( {0,} ), ale jak najmniej +? - jedne lub więcej powtórzeń ( {1,} ), ale jak najmniej.?? - zero lub jedno powtórzeń ( {0,1} ), ale jak najmniej.

Liczeności - przykłady (00){0,}abc(df)+ - wyrażenie wyszuka łańcuchy abc wraz z parzystą ilością 0 po lewej i co najmniej raz powtórzonymi znakami df po prawej Abcdf00abcabcdfdfabc00000abcdfabcdf (00){0,}?abc(df)+? - wyrażenie wyszuka łańcuchy abc wraz z parzystą ilością 0 po lewej i co najmniej raz powtórzonymi znakami df po prawej abcdf00abcabcdfdfabc00000abcdfabcdf

Liczeności - przykłady (?<=[^-0-9]) [0-9]{2}- [0-9]{3} (?![-0-9]) wyrażenie pasujące do kodów pocztowych nie otoczonych znakami - oraz znakami od 0 do 9.

Standardowe znaki specjalne \0 pusty znak, w programowaniu znak końca string-a (\u0000) \t znak tabulacji (\u0009) \n nowa linia (\u000a) \v znak tabulacji pionowej (\u000b) \xnn znak ASCI w kodowaniu hexadecymalnym nn. \onn znak ASCI w kodowaniu ósemkowym nn. \unnnn znak Unikodu w kodowaniu hexadecymalnym nn. \cx znak sterujący X

Znaki specjalne w wyrażeniach regularnych \ - Znak specjalny zostanie zmieniony na znak tekstu i na odwrót.. - dowolny znak z wyjątkiem '\n' \w dowolna litera, cyfra lub znak podkreślenia ([a-za-z0-9_]) \W dowolny znak niebędący literą, cyfrą lub znakiem podkreśleniem ([^a-za-z0-9_]) \s znak spacji. \S każdy znak z wyjątkiem spacji. \d znaki cyfr ([0-9]) \D każdy znak z wyjątkiem cyfr ([^0-9])

Znaki kotwiczne Znaki kotwiczne pozwalają określić obszar łańcucha znaków, dla którego ma być sprawdzane wyrażenie. Działają w podobny sposób do asercji. ^ - początek łańcucha znaków. $ - koniec łańcucha znaków. \b granica wyrazu. \B - pozycja niebędąca granicą wyrazu

Znaki kotwiczne - przykłady \b[a-z]+\b wyrażenie wyszuka łańcuchów składających się ze znaków od a do z przy czym wyszukany łańcuch musi być osobnym wyrazem. \b[0-9]+ wyrażenie wyszuka łańcuchy cyfr, które są również początkami wyrazów.

Znaki kotwiczne - przykłady ^ [a-z]+ wyrażenie wyszuka ciąg składających się ze znaków od a do z przy czym wyszukany ciąg musi być na początku łańcucha wejściowego. ^[0-9]+$ wyrażenie wyszuka, a raczej zwaliduje łańcuch, który będzie składał się z samych cyfr.

Klasy a polskie znaki Niemożliwe jest określenie klasy polskich znaków przez zakres znaków ([ą-źą-ź]) musimy je wypisać ([ąćęłńóśźżąćęłńóśźż]) spowodowane to jest tym, że znaki polskie są wspólne z innymi językami i ich kody unikodu są rozrzucone np. ą(\u0105), ć(\u0107), ó(\u00f3), ż(\u017c). Jak widać nie da się ich potraktować jako zakres znaków.

Wyrażenia regularne - przykłady ^abc wyrażenie zgodne z łańcuchami rozpoczynającymi się od abc. abcabc abc abc$ - wyrażenie wyszuka ciąg abc, który kończy łańcuch. abcabc abc

Wyrażenia regularne - przykłady ^abc$ wyrażenie pasujące do łańcuchów abc. abc zgodne abab abc niezgodne ^(abc cba)k2$ - wyrażenie pasujące do łańcuchów rozpoczętych abc lub cba i zakończonych k2. cbak2 zgodne cbak2 w niezgodne

Wyrażenia regularne - przykłady ^(abc cba).+k2$ - wyrażenie pasujące do łańcuchów rozpoczętych abc lub cba i zakończonych k2 poprzedzonego dowolnymi znakami. cba..k2 zgodne cbak2k2 zgodne cbak2 niezgodne ^(abc cba)(.+)k2\2$ - \2 oznacza, że po prawej stronie k2 musi znaleźć się ciąg zgodny z (.+) po jego lewej stronie. cba...k2... zgodne cbak2k2k2 zgodne cbak2k2 niezgodne

Wyrażenia regularne - przykłady [0-9]{2}-[0-9]{3} wyrażenie wyszuka kody pocztowe. 1242-20042-6005 45- ^([0-9]{2}-[0-9]{3} ) $ - wyrażenie pasujące do kodu pocztowego 20-120 zgodny 1220-222 niezgodny

Wyrażenia regularne - przykłady [^0-9]* - wzór pasujący do wszystkich znaków z wyjątkiem cyfr. 12d42-200_/l?_42-600xsds5sxs45- \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} wzór pasuje do adresów IP. ws192.168.1.1sdsw dws192.168,1.1sdsw d

Wyrażenia regularne - przykłady [a-z0-9_.-]+@[a-z0-9_.-]+\.[a-z]{2,4} - wzór pasujący do adresu email. adres_adres.tf@dmm.pl fg@hj.tc (?=([^,]*[0-9]){3,})(?=([^,]*[A-B]){2,}) [^,]{5,} wyrażenie wyszuka łańcuchy minimum 5 znaków rozdzielonych znakiem,, zawierających 3 cyfry i 2 duże litery. 123AB,1A23B,aaaa123,a2b#AB+12,12

Wyrażenia regularne - przykłady (?=^.{5,}$)(?=(.*[0-9]){3,})(?=(.*[A-B]){2,})^.*$ - wzór walidujący hasła zawierające min. 5 znaków w tym 2 duże litery i 3 cyfry. 123AB zgodne 1A23Bdsdf zgodne aaaa123 niezgodne

Uwaga Walidacje ze względów bezpieczeństwa należy przeprowadzać po stronie serwera. Możliwość podesłania spreparowanego formularza. Walidacja po stronie klienta jest sprawą kosmetyczną, usprawniającą użytkownikowi korzystanie ze strony.

JavaScript Wyrażenia regularne Metody klasy string obsługujące wyrażenia regularne: match(wzór) metoda szuka pasujących do wzorca treści, następnie zwraca ich zbiór lub NULL jeśli nic nie znalazła. replace(wzór, zastępnik) metoda zastępuje treść pasującą do wzorca zastępnikiem. search(wzór) wyszukuje treści pasującej do wzorca i zwraca jej pozycje w stringu lub -1 jeśli nic nie znajdzie. split(wzór, limit) dzieli string-a na podstawie wzorca, dodatkowo można nadać limit rozdzielonych elementów.

JavaScript Wyrażenia regularne Wyrażenia regularne definiujemy wprowadzając ich treść w znakach / var re = /^([%]?[0-9A-Za-z])$/; str.match(re); str.match(/^([%]?[0-9a-za-z])$/);

MVC Walidacja modelu (model) namespace TestAplication.Models { [MetadataType(typeof(osobaValidate))] public partial class osoba { } [Bind(Exclude = "id")] public class osobavalidate { [Required(ErrorMessage = "Podaj nazwisko")] [StringLength(20, ErrorMessage="Nazwisko max 20 znaków")] [RegularExpression("^([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+)$", ErrorMessage="Nazwisko tylko litery")] public string nazwisko { get; set; } [Required(ErrorMessage = "Podaj imie")] [StringLength(20, ErrorMessage = "Imie max 20 znaków")] [RegularExpression("^([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+)$", ErrorMessage="Imie tylko litery")] public string imie { get; set; } [Required(ErrorMessage = "Podaj wiek")] [Range(1,130, ErrorMessage = "Wiek od 1 do 130")] [RegularExpression("^([0-9]+)$", ErrorMessage="Wiek tylko liczby")] public string wiek { get; set; }

MVC Walidacja modelu (Controller) [HttpPost] public ActionResult Dodaj(osoba os) { if (ModelState.IsValid) // informacja o zgodności modelu { repo.dodaj(os); if (Request.IsAjaxRequest()) return PartialView("OsobaTab", repo.pobierzliste()); return RedirectToAction("Index"); } if (Request.IsAjaxRequest()) { ViewData["errors"] = ModelState.Values.SelectMany(v => v.errors); return PartialView("OsobaTab", repo.pobierzliste()); } return View(os); }

* * * MVC Walidacja modelu (View) <% Html.EnableClientValidation(); %> // treść wprowadzanych danych będzie na bieżąco sprawdzana u klienta <% using (Html.BeginForm()) {%> <%: Html.ValidationSummary(true) %> <fieldset> <legend>fields</legend> <div class="editor-label"> <%: Html.LabelFor(model => model.nazwisko) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.nazwisko) %> <%: Html.ValidationMessageFor(model => model.nazwisko) %> </div>

C# Wyrażenia regularne W C# z wyrażeń regularnych można korzystać za pomocą klasy Regex. Posiada ona między innym metody: bool IsMatch(String) Match Match(String) string Replace(String, String) string[] Split(String)

C# Wyrażenia regularne Regex patern = new Regex("^([0-9]*)$"); if (!patern.ismatch("34,8")){ // jakaś akcja }

Sumy kontrolne nr. PESEL Nr PESEL składa się z 11 cyfr z czego ostatnia jest kontrolna. W celu walidacji nr PESEL należy: Uzyskać sumę 10 pierwszych cyfr mnożonych przez ich wagi sum = 1*P1+3*P2+7*P3+9*P4+1*P5+3*P6+7*P7+9*P8+1*P9+3*P10 Uzyskać wartość modulo 10 z sumy. mod = sum%10 Uzyskać wartość kontrolną i sprawdzić zgodność z 11 cyfrą nr PESEL wynik = (10-mod)%10 == P11

Źródła http://myregexp.com/ - strona z apletem do pisania i testowania wyrażeń regularnych.