Biểu thức hợp lệ là 1 chuỗi dùng làm khuôn mẫu để kiểm tra định dạng của một chuỗi có hợp lệ hay không, bằng cách so chuỗi với khuôn mẫu
Biểu thức hợp lệ gồm 2 phần: hằng giá trị (literal) và siêu ký tự hay ký tự đại diện (metacharacter). Literal là các ký tự mà bạn muốn đem so khớp với chuỗi.
Ký tự đại diện |
Ý nghĩa |
[0-9] hay \d |
1 ký tự số từ 0 – 9 |
[0-9a-zA-Z_] hay \w |
ký tự chữ cái, chữ số và gạch chân (hoa thường) |
.(dấu chấm) |
ký tự bất kỳ trừ ký tự xuống dòng \n |
\s |
ký tự trắng (\r\n\t\f\v) (về đầu dòng, xuống dòng, tab, qua trang) |
[xyz] |
1 ký tự x,y hặc z |
\D |
ký tự không thuộc \d |
\W |
ký tự không thuộc \w |
[^xyz] |
ký tự không thuộc xyz |
^ |
ký tự bắt đầu một chuỗi hay một dòng |
$ |
ký tự kết thúc một chuỗi hay một dòng |
\A |
bắt đầu một chuỗi |
\z |
kết thúc một chuỗi |
| |
ký tự ngăn cách tương đương phép hoặc |
[a-z] |
1 ký tự nằm trong phạm vi a-z |
() |
xác định 1 biểu thức con, ví dụ ((a(b))c) sẽ khớp với b, ab, abc |
Số lần xuất hiện ký tự trong biểu thức hợp lệ
Số lần xuất hiện |
Ý nghĩa |
{n,m} |
ít nhất n lần, nhiều nhất m lần ký tự đứng trước nó |
{,m} |
nhiều nhất m lần |
{n,} |
ít nhất n lần |
{n} |
chính xác n lần |
? |
tương đương {0,1} |
* |
tương dương {0, vô cùng} |
+ |
tương đương {1, vô cùng} |
Không chỉ rõ |
1 lần |
Ví dụ:
Biểu thức hợp lệ cho chuỗi bắt đầu với “From” hoặc “To” hoặc “Subject” hoặc “Date”, kết thúc chuỗi bởi dấu hai chấm:
string st = ^(From|To|Subject|Date):
Số chứng minh nhân dân 9 ký tự:
string ChungMinh = "[0-9]{9}";
Số điện thoại di động 10 số hay 11 số bắt đầu bằng 0:
string DienThoai = @“^(0\d{9,10})$";
Địa chỉ email:
string Email = @“^(\w+.@\w+.\w{2,4})$";
Short Date:
string Date = @"\d{1,2}/\d{1,2}/\d{4}“;
Lớp Regex thuộc không gian tên System.Text.RegularExpressions sử dụng để kiểm tra một chuỗi hợp lệ hay không. Để khởi tạo một đối tượng regular expression:
Regex r = new Regex(@"\s2000");
Các thuộc tính của lớp Regex
- RegexOptions Options: trả về chuỗi truyền vào phương thức khởi tạo
- bool RightToLeft: trả về giá trị chỉ rõ regular expression dò tìm từ phải qua trái hay không
Các phương thức của lớp Regex:
- bool IsMatch(string input)
static bool IsMatch(string input, string pattern): kiểm tra chuỗi input có so khớp với regular expression không
bool IsMatch(string input, int startat): kiểm tra một phần của chuỗi input kể từ vị trí startat có so khớp với regular expression
- Match Match(string input, int startat): tìm và trả về đối tượng Match chứa chuỗi con đầu tiên so khớp với regular expression trong chuỗi, startat là vị trí bắt đầu tìm
- MatchCollection Matches(string input, int startat): tìm và trả về danh sách các đối tượng Match chứa tất cả chuỗi con so khớp với regular expression xuất hiện trong chuỗi
- string Replace(string input, string replacement)
string Replace(string input, MatchEvaluator evaluator): thay thế chuỗi con so khớp với regular expression tìm thấy trong chuỗi input bởi một chuỗi ký tự thay thế (hay chuỗi xác định bởi đối tượng MatchEvaluator)
- string[] Split(string input): tách một chuỗi thành một mảng các chuỗi con ngăn cách bởi chuỗi ngăn cách so khớp với regular expression
Lớp Math sử dụng kết hợp với lớp Regex để so khớp chuỗi, tìm chuỗi, tách chuỗi… Lớp Math bao gồm các thuộc tính:
- string Value: trả về chuỗi trong đối tượng Match
- bool Success: trả về giá trị cho biết dò tìm thành công hay không
- int Index: trả về vị trí tìm thấy đầu tiên
Ví dụ: Tìm chuỗi con
string St = "aabcdefghaabcdef";
string Pattern = "a{2}b"; //Biểu thức hợp lệ
Regex MyRegex = new Regex(Pattern);
Match M = MyRegex.Match(St);
if (M.Success)
Console.WriteLine("Tìm thấy chuỗi con {0} ở vị trí thứ {1} trong chuỗi",
M.Value, M.Index);
else Console.WriteLine("Không tìm thấy");
Ví dụ: Tìm danh sách các chuỗi con
MatchCollection MC;
string St = "aabcdefghaabcdef";
string Pattern = “a{2}b";
Regex MyRegex = new Regex(pattern);
MC = MyRegex.Matches(St);
foreach (Match M in MC)
Console.WriteLine("Chuỗi con '{0}' xuất hiện ở vị trí {1}", M.Value, M.Index);
Ví dụ:Kiểm tra dữ liệu nhập sử dụng ErrorProvider
using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace Validating
{
public partial class FormValidating : Form
{
private void button1_Click(object sender, EventArgs e)
{
bool error = false;
errorProvider1.Clear();
//Tên không để trống
if (textBox1.Text.Length == 0)
{
errorProvider1.SetError(textBox1, "Tên không để trông");
error = true;
}
//Tuổi không nhỏ hơn 20
try {
if (Convert.ToByte(textBox2.Text) < 20)
{
errorProvider1.SetError(textBox2, "Tuổi không nhỏ hơn 20");
error = true;
}
}
catch (FormatException) {
errorProvider1.SetError(textBox2, "Tuổi không nhỏ hơn 20");
error = true;
}
catch (OverflowException) {
errorProvider1.SetError(textBox2, "Tuổi không nhỏ hơn 20");
error = true;
}
//Ngày tham gia không trễ hơn ngày hiện hành
try {
if (Convert.ToDateTime(textBox3.Text) > DateTime.Now)
{
errorProvider1.SetError(textBox3, "Ngày tham gia không trễ hơn ngày hiện hành");
error = true;
}
}
catch (FormatException) {
errorProvider1.SetError(textBox3, "Ngày tham gia không trễ hơn ngày hiện hành");
error = true;
}
//Số chứng minh nhân dân phải đủ 9 số
string ChungMinhPattern = "[0-9]{9}";
string ChungMinh = textBox4.Text;
if( ! Regex.IsMatch(ChungMinh, ChungMinhPattern))
{
errorProvider1.SetError(textBox4, "Số chứng minh nhân dân phải đủ 9 chữ số");
error = true;
}
//Mobile phải có 10 hay 11 chữ số, bắt đầu là 0
string DienThoaiPattern = @"^(0\d{9,10})$";
string DienThoai = textBox5.Text;
if (!Regex.IsMatch(DienThoai, DienThoaiPattern))
{
errorProvider1.SetError(textBox5, "Mobile phải có 10 hay 11 chữ số, bắt đầu là 0");
error = true;
}
string EmailPattern = @"^(\w+.@\w+.\w{2,4})$";
string Email = textBox6.Text;
if (!Regex.IsMatch(Email, EmailPattern))
{
errorProvider1.SetError(textBox6, "Email không hợp lệ");
error = true;
}
//Ngày sinh
string NgaySinhPattern = @"\d{1,2}/\d{1,2}/\d{4}";
string NgaySinh = textBox7.Text;
if (!Regex.IsMatch(NgaySinh, NgaySinhPattern))
{
errorProvider1.SetError(textBox7, "Ngày sinh không hợp lệ");
error = true;
}
//Xử lý dữ liệu nhập
if (!error)
//xử lý dữ liệu nhập
}
}
}
Ví dụ: Tách chuỗi
string St = "Một, Hai, Ba Bốn. ";
string Pattern = " |,";
Regex MyRegex = new Regex(Pattern);
string[] SubStringArr = MyRegex.Split(St);
foreach (string SubString in SubStringArr)
Console.WriteLine(SubString);
» Tin mới nhất:
» Các tin khác: