10/10/2018, 10:49
giúp mình tạo chuỗi regex trong js
mình muốn tạo 1 chuỗi regex js để kiểm tra tên đăng nhập của người tạo acc như sau
ký tự đầu tiên phải là chữ [a-zA-Z]
ký tự cuối cùng phải là chữ hoặc số [a-zA-Z0-9]
ký tự ở giữa phải là chữ hoặc số hoặc dấu _ [a-zA-Z0-9_]
giờ làm sao ghép lại cho đúng yêu cầu của mình
mình làm sai hoài, nên giờ mọi người chỉ giúp
xin cám ơn rất nhiều
ký tự đầu tiên phải là chữ [a-zA-Z]
ký tự cuối cùng phải là chữ hoặc số [a-zA-Z0-9]
ký tự ở giữa phải là chữ hoặc số hoặc dấu _ [a-zA-Z0-9_]
giờ làm sao ghép lại cho đúng yêu cầu của mình
mình làm sai hoài, nên giờ mọi người chỉ giúp
xin cám ơn rất nhiều
Bài liên quan
1. Biểu thức /noi dung/ bản thân đã là đối tượng RegExp nên không cần lồng trong một lệnh new RegExp
2. [a-zA-Z]{1}+ đoạn này không chạy được
3. ([a-zA-Z0-9]*)+ đoạn này thì thừa dấu +
4. Tổng thể đoạn mã sẽ kiểm tra không chặt chẽ, nếu user name là " %^&&^$$ ab9 &^^&^&^" nó cũng kiểm tra hợp lệ, cần ràng buộc bằng cách thêm ^ và $ ở đầu và cuối biểu thức để xác định rằng tính từ đầu chuỗi với điều kiện này cho đến cuối chuỗi phải hợp lệ, còn nếu không để thì chỉ cần 1 khúc giữa chuỗi thỏa điều kiện cũng được xem là hợp lệ
Mình xin đề xuất chỉnh lại
if (/^[a-z][a-z\d_]*[a-z\d]$/i.test(userNameVariable.replace(/^\s+|\s+$/g, '')))
{
// làm gì đó
}
Đoạn mã trên có 2 phần:
1. Loại bỏ những ký tự khoảng trống thừa ở 2 đầu (tương đương với Trim spaces) => replace(/^\s+|\s+$/g, '')
2. /^[a-z][a-z\d_]*[a-z\d]$/i Là biểu thức RegExp, với option IgnoreCase(không phân biệt hoa thường) nên trong biểu thức không cần phải a-zA-Z, sử dụng \d thay cho 0-9 sẽ ngắn gọn hơn
3. Nếu muốn ràng buộc là không cho phép user nhập nhầm khoảng trắng ở 2 đầu thì có thể bỏ đoạn replace đi.
bạn anhchanghaudau có thể giải thêm có mình biết về ký tự ^ * $ ko
Bạn hiểu RegExp theo ý nghĩa đơn giản như vầy sẽ rất dễ học, hầu hết các cú pháp RegExp đều theo dạng cặp như thế này:
(biểu thức)(bổ nghĩa)
Mình lấy ví dụ với biểu thức ^[a-z][a-z\d_]*[a-z\d]$
Ta có được các cặp sau:
[a-z] => chỉ có biểu thức mà không có bổ nghĩa thì xem như là tìm đúng 1 lần
[a-z\d_]* => bổ nghĩa ở đây là *, ý nghĩa là tìm ít nhất là 0 và nhiều nhất là n (0 - n) nội dung thỏa điều kiện biểu thức
[a-z\d] => không có bổ nghĩa nên hiểu là một
Vậy suy ra, khi tạo một biểu thức ta cần xác định những thành phần biểu thức nhỏ để kiểm tra hợp lệ, còn phần bổ nghĩa cho biểu thức tùy yêu cầu mà sử dụng.
Có các loại bổ nghĩa sau:
*: ít nhất là 0, nhiều nhất không giới hạn (0 - n)
+: ít nhất là 1, nhiều nhất không giới hạn (1 - n)
?: ít nhất là 0, nhiều nhất là 1 (0 - 1)
{x}: x là một con số, tìm đúng chính xác x lần
{x,}: x là một con số: ít nhất là x, nhiều nhất không giới hạn
{x,y}: x và y là một con số, ít nhất là x lần, nhiêu nhất là y lần
Không có trường hợp {,y}
bài viết rất chi tiết, mình hoc đã học thêm dc nhiều thứ