Cần giúp về regex javascript?

Em đang làm cái regex để kiểm tra người dùng nhập vào.Ví dụ như người dùng nhập vào id thì nếu id rỗng(tức là ng dùng chưa nhập) thì sẽ có dòng chữ đỏ bên cạnh là “Cần phải nhập tên” và khi người dùng nhập vào rồi mà nhập sai thì cũng sẽ có dòng chữ đỏ bên cạnh là “ID không hợp lệ”.Nhưng khi em tạo một cái thẻ span với id là error để hiện thị ra cái dòng chữ báo lỗi kia thì nó chỉ hiện thị ra một cái thôi .Em chưa biết làm sao để nó kiểm tra được cả 2 nhỉ.

function check(){
	var ck_id = /^[A-Za-z0-9]{5,10}$/;
	var ck_pass = /^[A-Za-z0-9#$%\^&*9()_]{5,10}$/;
	var ck_email = /^[A-Za-z][A-Za-z0-9]+@[A-Za-z]+\.[a-z]{2,}$/
	var id = document.getElementById('id').value;
	var pass = document.getElementById('pass').value;
	if(id == ""){
		document.getElementById('errorid').innerHTML = "Moi nhap ten";
	}
	else{
		document.getElementById('errorid').innerHTML = "";
	}
 	if(ck_id.test(id)){
 		document.getElementById('errorid').innerHTML = "Hop le";
 	}
 	else{
 		document.getElementById('errorid').innerHTML = "Id k hop le";
 	}
 	if(ck_pass.test(pass)){
 		document.getElementById('errorpass').innerHTML = "Hop le";
 	}
 	else{
 		document.getElementById('errorpass').innerHTML = "Pass k hop le";
 	}
	return false;

}


bạn là người hôm qua hỏi về regex, hỏi xong biến mất tiêu luôn, hỏi kiểu vậy thì ai trả lời cho mình nữa.
chút góp ý nhỏ khi post bài hỏi.

1 Like

Thì bạn cộng lỗi lại rồi hiển thị thôi kiểu như:

var loi = "";
if(...) {
 loi += "Loi 1"
}

if(...) {
 loi += "Loi 2"
}

if(loi == "") {
  loi = "hop le"
}

document.getElementById('errorid').innerHTML = loi;

2 Likes

Khi sử dụng regex thông thường thì gặp một kí tự bất kì nào thỏa mãn điều kiện trong chuỗi regex là nó trả giá trị ngay, không tìm thêm các kí tự khác. Ví dụ:

console.log(`1234`.match(/\d/))
//Kết quả trả về sẽ là 1, kí tự đầu tiên thỏa mãn điều kiện trong chuỗi regex

Cách giải quyết vấn đề này thật ra lại cực kì đơn giản, chỉ cần thêm cờ (flags) vào là được. Cờ ở đây có thể hiểu là một kí tự hoặc chuỗi các kí tự dùng trong việc tìm kiếm nâng cao. Trong Javascript, cú pháp của một regex pattern kết hợp với cờ là:

/pattern/flags

Hoặc

new Regex("patterns","flags")

Trong đó:

  • Pattern là regex pattern cần sử dụng
  • Flags là cờ

Trong trường hợp này thì cờ mà em cần dùng là g (global - toàn cục). Ví dụ:

console.log(`1234`.match(/\d/g))
//Kết quả trả về sẽ là ['1', '2', '3', '4']`- tất cả các kí tự thỏa mãn điều kiện trong chuỗi regex

Ngoài ra:

Chỗ này sao không ghi \w luôn cho nhanh :thinking:?

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?