Tải bản đầy đủ (.pdf) (15 trang)

Tuan10 validation, regex

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (616.71 KB, 15 trang )

11/3/2019

Lập trình Ứng dụng quản lý
Regular Expressions, Validation

Nội dung
 Regular Expressions

 Validation

1


11/3/2019

Nội dung
 Regular Expressions
 Validation

Regular Expressions
 Regular Expression là một ngôn ngữ cực mạnh

dùng mô tả văn bản cũng như thao tác trên văn
bản.
 Regular Expression là kỹ thuật xác định một
chuỗi các ký tự sẽ được sử dụng trong mẫu tìm
kiếm. Regular Expression được viết theo một cú
pháp cụ thể và sau đó thường được áp dụng trên
một chuỗi văn bản lớn hơn để xem chuỗi có đáp
ứng các điều kiện được xác định trong Regular
Expression hay không.



2


11/3/2019

Cấu trúc RegExp
 Cơ bản bao gồm 2 thành phần là:
 Literal (trực kiện): đại diện cho ký tự cần so khớp

(a, b, …,Z, 0, 1,… 9, _…).
 Metacharacters (siêu ký tự): là ký tự đặc biệt (\, -,
[, ], (, ), ^, $,…) hoạt động như chỉ thị lệnh trong
chuỗi RegExp.
 Ví dụ chuỗi RegExp kiểm tra tồn số: “^\d*$”.

Bộ Metacharacters cơ bản
Ký tự

Ý nghĩa

.

đại diện cho 1 ký tự bất kỳ trừ ký tự xuống dòng \n

\d

ký tự chữ số tương đương [0-9]

\D


ký tự ko phải chữ số

\s

ký tự khoảng trắng tương đương [\f\n\r\t\v]

\S

ký tự không phải khoảng trắng tương đương [^\f\n\r\t\v]

\w

ký tự word (gồm chữ cái và chữ số, dấu gạch dưới _ ) tương
đương [a-zA-Z_0-9]

\W

ký tự không phải ký tự word tương đương [^a-zA-Z_0-9]

^

bắt đầu 1 chuỗi hay 1 dòng

$

kết thúc 1 chuỗi hay 1 dòng

\A


bắt đầu 1 chuỗi

\z

Kết thúc 1 chuỗi

3


11/3/2019

Ký tự

Ý nghĩa

|

ký tự ngăn cách so trùng tương đương với phép or (lưu ý cái này
nếu muốn kết hợp nhiều điều kiện)

[abc]

khớp với 1 ký tự nằm trong nhóm là a hay b hay c

[a-z]

so trùng với 1 ký tự nằm trong phạm vi a-z, dùng dấu – làm dấu
ngăn cách

[^abc]


sẽ không so trùng với 1 ký tự nằm trong nhóm, ví dụ khơng so
trùng với a hay b hay c

()

Xác định 1 group (biểu thức con) xem như nó là một yếu tố đơn
lẻ trong pattern, ví dụ ((a(b))c) sẽ khớp với b, ab, abc.

?

khớp với đứng trước từ 0 hay 1 lần. Vídụ A?B sẽ khớp với B hay
AB.

*

khớp với đứng trước từ 0 lần trở lên. A*B khớp với B, AB, AAB,…

+

khớp với đứng trước từ 1 lần trở lên. A+B khớp với AB, AAB,..

{n}

n là số, khớp đúng với n ký tự đứng trước nó. Ví dụ A{2} khớp
đúng với AA.

{n,}

khớp đúng với n ký tự trở lên đứng trước nó, A{2,} khớp với AA,

AAA,...

{m,n}

khớp đúng với từ m -> n ký tự đứng trước nó, A{2,4} khớp vói
AA,AAA,AAAA.

Ví dụ
Ký hiệu

Ví dụ

So khớp với

^

^B

“B” xuất hiện ở đầu tiên của chuỗi

$

X$

“X” xuất hiện ở vị trí cuối cùng của chuỗi

.

i.ation


“isation”, “ization”

*

ra*t

“rt”, “rat”, “raat”, “raaat”,…

+

ra+t

“rat”, “raat”, “raaat”,…

?

ra?t

“rt”, “rat”

\s

\sa

“ a”, “\ta”, “\na”

\S

\SF


“aF”, “rF”, “cF”

\b

ion\b

bất kỳ word kết thúc bởi “ion”

\B

\Bx\B

Bất kỳ “x” nằm giữa word

4


11/3/2019

Sử dụng RegExp trong .NET
 Các class cần biết
 Regex
 Match
 MatchCollection

 Group
 GroupCollection
 Capture
 CaptureCollection


Class Regex
 Thuộc tính (Properties) cơ bản:
 Options: trả về những mục chọn được trao qua

cho constructor Regex.
 RightToLeft: nhận 1 trị cho biết liệu xem regular
expression dị tìm từ phải qua trái hay khơng.
 Phương thức (Method) cơ bản:
 GetGroupNames: trả về mảng gồm tồn tên nhóm

lấy được đối với RegExp.
 GetGroupNumbers: trả về mảng gồm tồn số
nhóm lấy được tương ứng với tên nhóm trên 1
mảng.

5


11/3/2019

 GroupNameFromNumber: đi lấy tên nhóm tương ứng với

số nhóm được khai báo.
 IsMatch: trả về trị bool cho biết liệu xem RegExp có tìm

thấy một so khớp hay khơng trên pattern.
 Match: dị tìm trên pattern xem có xuất hiện một RegExp










hay khơng rồi trả về kết quả chính xác như là một đối
tượng Match duy nhất.
Matches: dị tìm trên pattern xem tất cả các xuất hiện của
một RegExp có hay khơng rồi trả về tất cả những so khớp
thành công xem như Match được gọi nhiều lần.
Replace: cho thay thế những xuất hiện của một pattern
được định nghĩa bởi một RegExp bởi một chuỗi ký tự thay
thế được chỉ định.
Split: chia một pattern thành một mảng gồm những chuỗi
con ở những vị trí được chỉ định bởi một so khớp trên
RegExp.
Unescape: cho unescape bất cứ những ký tự nào được
escape trên pattern.

Nội dung
 Regular Expressions

 Validation

6


11/3/2019


Validation
 Dữ liệu nhập cần phải được kiểm sốt tính hợp lệ

trước khi lưu xuống database để đảm bảo tính
tồn vẹn dữ liệu.
 Q trình kiểm tra tính hợp lệ của dữ liệu nhập
gọi là validation.
 Tùy thuộc vào kiến trúc của ứng dụng để xây
dựng cơ chế validation phù hợp (nơi thực hiện,
mức độ,…)

Validation Events
 Validation events được thiết kế để cho phép

kiểm tra thông tin ngay khi được nhập, hơn là
chờ đợi để gửi toàn bộ biểu mẫu (form). Điều
này là rất hữu ích vì:
 Người dùng sẽ yên tâm gửi biểu mẫu vì khả năng

phát sinh lỗi đã được kiểm sốt.
 Người dùng có thể nhập nhiều mẩu dữ liệu không
hợp lệ vào cùng một thời điểm. Nếu không kiểm tra
dữ liệu cho đến khi biểu mẫu được gửi đi, chương
trình sẽ phải tìm ra cách nào đó để thơng báo tất cả
các lỗi cùng một lúc.
 Vào thời điểm người dùng gửi biểu mẫu, họ có thể
đã quên về trường cụ thể mà họ nhập không chính
xác.

7



11/3/2019

Validation Event Sequence
 Khi điều hướng từ control này sang control khác,

một chuỗi event sẽ xảy ra. Ví dụ chuyển từ TextBox1
sang TextBox2 bằng cách nhấn tab thì các event
xảy ra như sau





Leave (TextBox1)
Enter (TextBox2)
LostFocus (TextBox1)
GotFocus (TextBox2)

 Thực hiện validation với event LostFocus ?
 Khi điều hướng bằng mouse:





LostFocus (TextBox1)
Leave (TextBox1)
Enter (TextBox2)

GotFocus (TextBox2)

Validating events
 Trong .NET, event xảy ra khi điều hướng từ

TextBox1 sang TextBox2
 Leave (TextBox1)
 Enter (TextBox2)
 Validating (TextBox1)
 Validating (TextBox2)
 LostFocus (TextBox1)
 GotFocus (TextBox2)

 Validated event cho phép phản hồi dữ liệu đã

nhập chính xác.
 Validating event cho phép thực hiện xác minh
dữ liệu và kiểm soát chuyển focus control.

8


11/3/2019

CausesValidation property
 Validation chỉ diễn ra khi source control có thiết

lập property CausesValidation thành true. Ngồi
ra, Validation sẽ khơng xảy ra cho đến khi sự
thay đổi focus vào một control cũng có property

CausesValidation được đặt thành true. Nếu một
trong hai có một CausesValidation của false,
các event validation bị tạm dừng, nhưng các
event khác (như Enter và Leave) vẫn xảy ra.
Bảng sau cho thấy một số ví dụ về những gì có
thể xảy ra khi điều hướng từ control này sang
control khác.

.NET Validation
Source Control

Destination Control

Result

CousesValidation = false

Không xảy ra

Validation code bị bỏ qua

CousesValidation = true

CousesValidation = true

Validation được thực hiện
cho source control

CousesValidation = true


CousesValidation = false

Validation bị hoãn lại cho
đến khi sự thay đổi focus
vào một
CausesValidation. Vào
thời điểm này, tất cả các
control cần phải được
valid theo thứ tự cho đến
khi một control được tìm
thấy với dữ liệu nhập
khơng hợp lệ và quá trình
bị hủy bỏ.

9


11/3/2019

Ví dụ
private void TxtFN_Validating(object sender, CancelEventArgs e)
{
if (((TextBox)sender).Text.Length == 0)
{
MessageBox.Show("You must enter a first and last name.",
"Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning);
e.Cancel = true;
}
}


Vấn đề đóng form
private void BtnCancel_Click(object sender, EventArgs e)
{
AutoValidate = AutoValidate.Disable;
Close();
}

10


11/3/2019

Giải quyết vấn đề
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
// If e.Cancel is true, the cancel flag has been set by a validation routine.
if (e.Cancel)
{
DialogResult result = MessageBox.Show("Do you wish to close the form?",
"Errors found", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
e.Cancel = false;
}
}
}

ErrorProvider
 Sử dụng MessageBox (Dialog) để thông báo lỗi


đến người dùng là giải pháp không tốt, làm giảm
chất lượng trải nghiệm ứng dụng.
 Cần có hướng tiếp cận thơng báo lỗi đến người
dùng thân thiện hơn, mục tiêu vừa không làm
gián đoạn trải nghiệm người dùng, vừa đưa được
thông tin lỗi sớm và chính xác nhất (vị trí và loại
lỗi).
 .NET cung cấp control ErrorProvider để giúp hiển
thị thông tin lỗi uyển chuyển hơn.

11


11/3/2019

Sử dụng ErrorProvider
private void TxtFN_Validating(object sender, CancelEventArgs e)
{
Control ctrl = (Control)sender;
if (ctrl.Text.Length == 0)
{
errorProviderMain.SetError(ctrl, "You must enter a first and last name.");
e.Cancel = true;
}
else
{
errorProviderMain.SetError(ctrl, "");
}
}


Kiểm tra lỗi
private void BtnOK_Click(object sender, EventArgs e)
{
if (errorProviderMain.GetError(txtFN).Length == 0 &&
errorProviderMain.GetError(txtLN).Length == 0)
{
Close();
}
else
{
MessageBox.Show("You still have invalid input.",
"Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}

12


11/3/2019

Custom Validation Components
 Mỗi control để thực hiện validation có logic,

message và cũng như xử lý event riêng.
 Trong ứng dụng thực tế với rất nhiều form, nhiều
control cần validation thì việc thực hiện riêng
từng validation là khơng khả thi.
 Cần có giải pháp tạo các Validation Component…

Các yêu cầu cơ bản

 Cần dẫn xuất từ Component để có được design

mode.
 Cần sử dụng ErrorProvider để thực hiện thông
báo lỗi trên UI.
 Cần cho phép tùy biến error message.
 Cần thực hiện bind với input control cụ thể để
thực hiện validation.

13


11/3/2019

Ví dụ
public class RegExValidator : Component
{
ErrorProvider errorProvider = new ErrorProvider();
public string ErrorMessage { get; set; }
public string RegExString { get; set; }
Control control2Validate;
[TypeConverter(typeof(ReferenceConverter))]
public Control ControlToValidate
{
get => control2Validate;
set
{
if (control2Validate != null && !DesignMode)
{
control2Validate.Validating -= Control2Validate_Validating;

}
control2Validate = value;
if (control2Validate != null && !DesignMode)
{
control2Validate.Validating += Control2Validate_Validating;
}
}
}
private void Control2Validate_Validating(object sender, CancelEventArgs e)
{

}

}

MaskedTextBox
 Properties
 Mask
 PromptChar
 TextMaskFormat
…

 Events
 TypeValidationCompleted
 MaskInputRejected
…

14



11/3/2019

Nội dung
 Regular Expressions
 Validation

 Bài tập

Bài tập
 Với database QLBH, tạo form đăng ký như hình

 Kiểm tra nhập liệu và thông báo lỗi cho người dùng ngay khi chuyển

focus
 Các trường nhập liệu không được bỏ trống.
 Username phải duy nhất, ko có ký tự HOA, bắt đầu bởi ký tự a-z,
không khoảng trắng và các ký tự đặc biệt (chỉ gồm a-z, 0-9, -, _, .).
 Password chỉ gồm các ký tự: a-z, 0-9 và tối thiểu 3 ký tự.
 Name không được bắt đầu bởi ký số hay ký tự đặc biệt.
 Email cần đúng chuẩn cơ bản (check được mail fit).
 DOB theo format: dd/mm/yyyy.

15



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×