Documente Academic
Documente Profesional
Documente Cultură
1 24.03.2019
ErrorMessage – textul explicit al mesajului afişat în ValidationSummary, în cazul
unei erori de validare;
Text - mesaj afişat de control în situaţia invalidării.
Type – tipul datei de validat; informaţia e convertită la acest tip înainte de validare.
Dacă în câmp nu se introduce nimic, se consideră situaţie validă; dacă se doreşte altfel, se va
adăuga şi un control RequiredFieldValidator,ţintind spre acelaşi câmp. Dacă eşuează
conversia la tipul indicat, se consideră de asemenea situaţie validă.
Ca să fixăm momentul validării am folosit un buton Save, care implicit anunţă serverul când
este apăsat cu mouse-ul şi care în realitate afişează într-un textBox numele preluat din tbNumele.
private void btnSave_Click(object sender, System.EventArgs e)
{
tbAfisaj.Text+="\r\n"+tbNumele.Text;
}
Un control poate fi ţinta mai multor controale de validare, implementând astfel criterii
diferite de validare; practic i se asociază câte un control de validare pentru fiecare tip de eroare
controlată.
ValidationSummary
CustomValidator
2 24.03.2019
Pentru validări particulare, specifice fiecărui program, se poate folosi controlul CustomValidator;
el deţine:
o proprietate, ClientValidationFunction, care precizează metoda de validare
aplicată în browser-ul clientului;
un eveniment, ServerValidate, care poate fi tratat printr-o funcţie executată pe
server.
Deoarece validarea se execută la client s-au pe server depinzând şi de capacităţile
browserului, se recomandă furnizarea ambelor funcţii de validare. Aşa cum aminteam, în timp ce
funcţia de validare pe server este scrisă în orice limbaj acceptat sub .NET, funcţia de validare la
client este scrisă, pentru a fi acceptată de majoritatea browserelor, în JavaScript sau VBScript.
Vom exemplifica lucru cu acest control considerând că ataşăm unui textBox tbNumar un
CustomValidator care semnalează eroare la introducerea unui număr impar.
<script language="javascript">
function ValidarePeClient(source, args)
{
// document.write( "<tr><td> ValidarePeClient </td><td>" );
// document.write(args.Value.toString());
if (args.Value % 2 == 0)
args.IsValid=true;
else
args.IsValid = false;
3 24.03.2019
}
</script>
RegularExpressionValidator
Funcţionează după modelul controalelor de validare de mai sus, având în plus proprietatea
ValidationExpression prin care se indică expresia uzuală ce stă la baza validării:
ValidationExpression = "[0-9]{8}|[0-9]{5}-[0-9]{3}"
8 cifre sau 5 + 3 cifre separate cu liniuţă ;
ValidationExpression = "^\d{5}$" cu semnificaţia:
^ început de şir
\d digit
{5} exact cinci cifre
4 24.03.2019
$ sfârşit de şir
De un real folos în validarea datelor sunt aşanumitele expresii regulate; ele sunt nişte
şabloane abstracte folosite pentru a preciza structura pe care trebuie să o respecte un câmp pentru a
fi considerat valid.
Sub Visual Studio, namespace-ul System.Text.RegularExpressions conţine clasa
specializată al cărei constructor de clasă, Regex. Regex(pattern, options), primeşte un model de
expresie regulată şi opţiuni (un singur caracter; "i" – insensitive matching; ). Clasa mai conţine:
IsMatch – metodă statică şi nestatică, pentru căutarea unui pattern într-un şir, returnând true
sau false. Varianta nestatică cere doar şirul în care caută, deoarece modelul de căutare s-a dat
în constructor.
Metoda Matches returnează toate subşirurile în care se găseşte pattern-ul de căutare, sub
forma unei colecţii MatchCollection ce conţine obiecte de tip Match, colecţie care poate apoi
fi apoi iterată cu foreach.
Metoda nestatică Replace a clasei Regex primeşte doi parametri, şirul în care caută pattern-ul şi
un şir cu care va substitui orice apariţie a pattern-ului în sir. De remarcat generalitatea căutării,
în sensul că în constructorul expresiei regulate se pot da pattern-uri complexe, de genul "ceva\b"
care semnalează şi substituie "ceva" doar când apare ca margine de cuvânt (\b - boundary).
Lucrurile stau similar şi cu metoda Split a clasei Regex, care se aseamănă cu metoda Split a
clasei String, dar oferă în plus facilităţi incomparabil mai puternice de calificare a subşirului pe
baza căruia se va face splitarea şirului într-un vector de subşiruri.
5 24.03.2019
căutat, în timp ce un pattern greedy permite cel mai mut posibil dintr-un şir căutat.
Spre exemplu, în şirul "oooo", 'o+?' indică un singur "o", în timp ce 'o+' îi indică pe
toţi.
. Un singur caracter, oarecare, exceptând "\n". Pentru a desemna un caracter oarecare,
inclusiv "\n"se foloseşte pattern-ul '[\s\S]'.
(pattern) Desemnează pattern şi captează rezultatul. Rezultatul potrivirii poate fi regăsit din
colecţia Matches, folosind SubMatches în VBScript sau $0…$9 în JScript. Pentru
descrierea parantezelor ( ), se folosesc secvenţele de escape '\(' şi '\)'.
(?:pattern) Ca mai sus, dar nu reţine rezultatul potrivirii, pentru o folosire ulterioară. Este util
pentru a combina părţi dintr-un pattern cu operatori "or" ( | ). Spre exemplu,
'industr(?:y|ies) este o descriere prescurtată a expresiei 'industry|industries'.
(?=pattern) Anticiparea pozitivă indică o potrivire dacă pattern-ul începe oriunde în şirul căutat.
Este un test fără reţinerea rezultatului. Spre exemplu, 'Windows (?=95|98|NT|2000)'
acoperă "Windows" în "Windows 2000", dar nu şi "Windows" din "Windows 3.1".
Anticiparea pozitivă nu consumă caractere; deci, căutarea pentru următoarea
potrivire începe imediat după ultimul caracter potrivit, nu după toate caracterele
cuprinse în anticipare.
(?!pattern) Anticiparea negativă indică o potrivire dacă şirul căutat începe oriunde apare ceva
diferit de pattern. Este un test fără reţinerea rezultatului. Spre exemplu, 'Windows
(?!95|98|NT|2000)' acoperă "Windows" din "Windows 3.1", dar nu acceptă
"Windows" din "Windows 2000". Anticiparea nu consumă caractere; deci, căutarea
pentru următoarea potrivire începe imediat după ultimul caracter potrivit, nu după
toate caracterele cuprinse în anticipare.
x|y x sau y. Spre exemplu, 'z|food' acoperă "z" sau "food", în timp ce '(z|f)ood' descrie
"zood" sau "food".
[xyz] Mulţime de caractere, formată din oricare din caracterele date între cele două
paranteze închise. Spre exemplu, '[abc]' poate acoperi pe 'a' din "plain".
[^xyz] Mulţime complementară de caractere, formată din oricare din caracterele care nu
apar între cele două paranteze închise. Spre exemplu, '[abc]' poate acoperi pe 'p' din
"plain".
[a-z] Interval de caractere. Spre exemplu, '[a-z]' desemnează literele mici din alfabet,
cuprinse între 'a' şi 'z' , iar [3–7a–dA–D] , cifre între 3-7 sau litere mici sau mari
între a-d.
[^a-z] Complementul unui interval de caractere, cuprinzând orice caracter ce nu face parte
din intervalul specificat. Spre exemplu, '[^a-z]' precizează orice caracter necuprins
între 'a' şi 'z'.
\b Margine de cuvânt, adică o poziţie între cuvânt şi spaţiu. Spre exemplu, 'er\b'
identifică 'er' în "never", dar nu şi 'er' în "verb".
\B Ne-margine de cuvânt. 'er\B' identifică pe 'er' în "verb", dar nu şi pe 'er' în "pioner".
\cx Caracter de control asociat cu x. Spre exemplu, \cM indică Control-M sau carriage
return. Valorile lui x trebuie să fie cuprinse în intervalul A-Z sau a-z; altminteri,
construcţia e tratată ca literal pentru caracterul 'c'.
\d Digit, cifră din intervalul 0-9; echivalent cu [0-9].
\D Nondigit, caracter din afara intervalului 0-9; echivalent cu [^0-9].
\f Caracterul form-feed; echivalent cu \x0c sau \cL.
\n Caracterul newline; echivalent cu \x0a sau \cJ.
\r Caracterul carriage return; echivalent cu \x0d sau \cM.
\s Caracter spaţiu (whitespace), incluzînd space, tab, form-feed, tab vertical, new line,
cariage return; echivalent cu [ \f\n\r\t\v].
\S Caracter non-whitespace; echivalent cu [^ \f\n\r\t\v].
\t Caracterul tab orizontal, adică \x09 sau \cI.
6 24.03.2019
\v Caracterul tab vertical, adică \x0b sau \cK.
\w Caracter de tip "word", litere, cifre şi underscore; echivalent cu [A-Za-z0-9_].
\W Caracter "nonword", adică echivalentul lui [^A-Za-z0-9_].
\xn Hexa-digit; n este o valoare hexadecimală dată ca secvenţă de escape, din două
cifre. Spre exemplu, '\x41' indică pe "A". '\x041' deoarece excede două cifre va fi
tratat ca '\x04' & "1". Permite folosirea codurilor ASCII în expresii regulate.
\num Identifică un număr num, întreg pozitiv, pentru o referinţă înapoi capturată anterior.
Spre exemplu, '(.)\1' desemnează două caractere consecutive, identice.
\n Identifică o secvenţă octală de escape sau o referinţă înapoi. Dacă \n este precedat
de cel puţin n subexpresii capturate, \n este tratată ca backreference. Altminteri, \n
este tratată ca secvenţă octală de escape, dacă n aparţine intervalului 0-7.
\nm Identifică o secvenţă octală de escape sau o referinţă înapoi. Dacă \nm este precedat
de cel puţin nm subexpresii capturate, \nm este tratată ca backreference. Dacă \nm
este precedat de cel puţin n subexpresii capturate, \nm este tratată ca backreference
urmată de un literal. Dacă niciuna din condiţiile de mai sus nu este îndeplinită, \nm
este tratată ca secvenţă octală de escape, cu condiţia ca m şi n să fie cifre octale (0-
7).
\nml Secvenţă de escape octală; n ia valori în 0-3, iar m şi l iau valori în 0-7.
\un Identifică pe n, un caracter Unicode exprimat prin patru cifre hexazecimale. Spre
exemplu, \u00A9 desemnează simbolul pentru copyright (©).
Numărul de prezenţe ale unui caracter sau clase de caractere se specifică printr-un
cuantificator; el se pune imediat după caracter sau clasa de caractere din şablon şi permite
specificarea numărului de produceri ale caracterului sau ansamblului de caractere, acceptat ca valid.
Cuantificator Interpretare
{N} N potriviri
{N,M} Între N şi M
[aeiou]{2,4}\+[1–5]* precizează că se aşteaptă un şir care începe cu două până la patru vocale,
urmate de semnul + şi terminat cu nicio sau mai multe cifre cuprinse între 1 şi 5.
7 24.03.2019