Bài giảng Lập trình ứng dụng quản lý - Tuần 10: Regular Expressions, Validation

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 toà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  
ký tự chữ số tương đương [0-9]  
\d  
\D  
\s  
\S  
ký tự ko phải chữ số  
ký tự khoảng trắng tương đương [\f\n\r\t\v]  
ký tự không phải khoảng trắng tương đương [^\f\n\r\t\v]  
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  
\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  
bắt đầu 1 chuỗi  
$
\A  
\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]  
[a-z]  
khớp với 1 ký tự nằm trong nhóm là a hay b hay c  
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  
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  
[^abc]  
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 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}  
{n,}  
khớp đúng với n ký tự trở lên đứng trước nó, A{2,} khớp với AA,  
AAA,...  
khớp đúng với từ m -> n ký tự đứng trước nó, A{2,4} khớp vói  
AA,AAA,AAAA.  
{m,n}  
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” xuất hiện ở vị trí cuối cùng của chuỗi  
“isation”, “ization”  
$
X$  
.
i.ation  
ra*t  
*
“rt”, “rat”, “raat”, “raaat”,…  
“rat”, “raat”, “raaat”,…  
“rt”, “rat”  
+
?
ra+t  
ra?t  
\sa  
\s  
\S  
\b  
\B  
“ a”, “\ta”, “\na”  
\SF  
“aF”, “rF”, “cF”  
ion\b  
\Bx\B  
bất kỳ word kết thúc bởi “ion”  
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 toàn tên nhó m  
lấy được đối với RegExp.  
GetGroupNumbers: trả về mảng gồm toà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 soát tính hợp lệ  
trước khi lưu xuống database để đảm bảo tính  
toàn vẹn dữ liệu.  
Quá 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 soá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)  
GotFocus (TextBox2)  
Thực hiện validation với event LostFocus ?  
Khi điều hướng bằng mouse:  
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. Ngoà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  
CousesValidation = true  
Validation được thực hiện  
cho source control  
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  
pdf 15 trang myanh 26800 Free
Bạn đang xem tài liệu "Bài giảng Lập trình ứng dụng quản lý - Tuần 10: Regular Expressions, Validation", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_ung_dung_quan_ly_1_tuan_10_regular_expre.pdf