1. Trang chủ
  2. » Công Nghệ Thông Tin

Tuan10 validation, regex

15 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Lập trình Windows 11/3/2019 1 Regular Expressions, Validation Lập trình Ứng dụng quản lý Nội dung  Regular Expressions  Validation 11/3/2019 2 Nội dung  Regular Expressions  Validation Regular Exp[.]

11/3/2019 Lập trình Ứng dụng quản lý Regular Expressions, Validation Nội dung  Regular Expressions  Validation 11/3/2019 Nội dung  Regular Expressions  Validation Regular Expressions  Regular Expression ngôn ngữ cực mạnh dùng mô tả văn thao tác văn  Regular Expression kỹ thuật xác định chuỗi ký tự sử dụng mẫu tìm kiếm Regular Expression viết theo cú pháp cụ thể sau thường áp dụng chuỗi văn lớn để xem chuỗi có đáp ứng điều kiện xác định Regular Expression hay không 11/3/2019 Cấu trúc RegExp  Cơ bao gồm 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ự): ký tự đặc biệt (\, -, [, ], (, ), ^, $,…) hoạt động thị lệnh chuỗi RegExp  Ví dụ chuỗi RegExp kiểm tra tồn số: “^\d*$” Bộ Metacharacters Ký tự Ý nghĩa đại diện cho ký tự 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ự khoảng trắng tương đương [^\f\n\r\t\v] \w ký tự word (gồm chữ chữ số, dấu gạch _ ) tương đương [a-zA-Z_0-9] \W ký tự ký tự word tương đương [^a-zA-Z_0-9] ^ bắt đầu chuỗi hay dòng $ kết thúc chuỗi hay dòng \A bắt đầu chuỗi \z Kết thúc chuỗi 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 ý muốn kết hợp nhiều điều kiện) [abc] khớp với ký tự nằm nhóm a hay b hay c [a-z] so trùng với ký tự nằm phạm vi a-z, dùng dấu – làm dấu ngăn cách [^abc] không so trùng với ký tự nằm nhóm, ví dụ khơng so trùng với a hay b hay c () Xác định group (biểu thức con) xem yếu tố đơn lẻ pattern, ví dụ ((a(b))c) khớp với b, ab, abc ? khớp với đứng trước từ hay lần Vídụ A?B khớp với B hay AB * khớp với đứng trước từ lần trở lên A*B khớp với B, AB, AAB,… + khớp với đứng trước từ lần trở lên A+B khớp với AB, AAB, {n} n số, khớp với n ký tự đứng trước Ví dụ A{2} khớp với AA {n,} khớp với n ký tự trở lên đứng trước nó, A{2,} khớp với AA, AAA, {m,n} khớp 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 chuỗi $ X$ “X” xuất vị trí cuối 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 word kết thúc “ion” \B \Bx\B Bất kỳ “x” nằm word 11/3/2019 Sử dụng RegExp NET  Các class cần biết  Regex  Match  MatchCollection  Group  GroupCollection  Capture  CaptureCollection Class Regex  Thuộc tính (Properties) bản:  Options: trả mục chọn trao qua cho constructor Regex  RightToLeft: nhận 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) bản:  GetGroupNames: trả mảng gồm tồn tên nhóm lấy RegExp  GetGroupNumbers: trả mảng gồm tồn số nhóm lấy tương ứng với tên nhóm mảng 11/3/2019  GroupNameFromNumber: lấy tên nhóm tương ứng với số nhóm khai báo  IsMatch: trả trị bool cho biết liệu xem RegExp có tìm thấy so khớp hay khơng pattern  Match: dị tìm pattern xem có xuất RegExp     hay không trả kết xác đối tượng Match Matches: dị tìm pattern xem tất xuất RegExp có hay khơng trả tất so khớp thành công xem Match gọi nhiều lần Replace: cho thay xuất pattern định nghĩa RegExp chuỗi ký tự thay định Split: chia pattern thành mảng gồm chuỗi vị trí định so khớp RegExp Unescape: cho unescape ký tự escape pattern Nội dung  Regular Expressions  Validation 11/3/2019 Validation  Dữ liệu nhập cần phải kiểm sốt tính hợp lệ trước lưu xuống database để đảm bảo tính tồn vẹn liệu  Q trình kiểm tra tính hợp lệ liệu nhập gọi validation  Tùy thuộc vào kiến trúc ứng dụng để xây dựng chế validation phù hợp (nơi thực hiện, mức độ,…) Validation Events  Validation events thiết kế phép kiểm tra thông tin nhập, chờ đợi để gửi toàn biểu mẫu (form) Điều hữu ích vì:  Người dùng yên tâm gửi biểu mẫu khả phát sinh lỗi kiểm soát  Người dùng nhập nhiều mẩu liệu khơng hợp lệ vào thời điểm Nếu không kiểm tra liệu biểu mẫu gửi đi, chương trình phải tìm cách để thông báo tất lỗi lúc  Vào thời điểm người dùng gửi biểu mẫu, họ quên trường cụ thể mà họ nhập khơng xác 11/3/2019 Validation Event Sequence  Khi điều hướng từ control sang control khác, chuỗi event xảy Ví dụ chuyển từ TextBox1 sang TextBox2 cách nhấn tab event xảy sau     Leave (TextBox1) Enter (TextBox2) LostFocus (TextBox1) GotFocus (TextBox2)  Thực validation với event LostFocus ?  Khi điều hướng mouse:     LostFocus (TextBox1) Leave (TextBox1) Enter (TextBox2) GotFocus (TextBox2) Validating events  Trong NET, event xảy đ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 liệu nhập xác  Validating event cho phép thực xác minh liệu kiểm soát chuyển focus control 11/3/2019 CausesValidation property  Validation diễn source control có thiết lập property CausesValidation thành true Ngồi ra, Validation khơng xảy thay đổi focus vào control có property CausesValidation đặt thành true Nếu hai có CausesValidation false, event validation bị tạm dừng, event khác (như Enter Leave) xảy Bảng sau cho thấy số ví dụ xảy điều hướng từ control sang control khác .NET Validation Source Control Destination Control Result CousesValidation = false Không xảy Validation code bị bỏ qua CousesValidation = true CousesValidation = true Validation thực cho source control CousesValidation = true CousesValidation = false Validation bị hoãn lại thay đổi focus vào CausesValidation Vào thời điểm này, tất control cần phải valid theo thứ tự control tìm thấy với liệu nhập không hợp lệ trình bị hủy bỏ 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 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 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 thơng tin lỗi sớm xác (vị trí loại lỗi)  NET cung cấp control ErrorProvider để giúp hiển thị thông tin lỗi uyển chuyể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 == && 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 validation có logic, message xử lý event riêng  Trong ứng dụng thực tế với nhiều form, nhiều control cần validation việc thực riêng validation khơng khả thi  Cần có giải pháp tạo Validation Component… Các yêu cầu  Cần dẫn xuất từ Component để có design mode  Cần sử dụng ErrorProvider để thực thông báo lỗi UI  Cần cho phép tùy biến error message  Cần thực bind với input control cụ thể để thực 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ý hình  Kiểm tra nhập liệu thơng báo lỗi cho người dùng chuyển focus  Các trường nhập liệu không bỏ trống  Username phải nhất, ko có ký tự HOA, bắt đầu ký tự a-z, không khoảng trắng ký tự đặc biệt (chỉ gồm a-z, 0-9, -, _, )  Password gồm ký tự: a-z, 0-9 tối thiểu ký tự  Name không bắt đầu ký số hay ký tự đặc biệt  Email cần chuẩn (check mail fit)  DOB theo format: dd/mm/yyyy 15

Ngày đăng: 09/04/2023, 06:29

Xem thêm: