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
s.code viết 12:52 ngày 10/10/2018
Code:
<script type="text/javascript">
var re = new RegExp(/[a-zA-Z]{1}+([a-zA-Z0-9]*)+[a-zA-Z0-9_]{1}/);
re.test(st)
</script>
anhchanghaudau viết 12:59 ngày 10/10/2018
Được gửi bởi s.code
Code:
<script type="text/javascript">
var re = new RegExp(/[a-zA-Z]{1}+([a-zA-Z0-9]*)+[a-zA-Z0-9_]{1}/);
re.test(st)
</script>
Bạn sử dụng reg có nhiều điểm không hợp lý, mình xin góp ý
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.
zKeitherz viết 12:51 ngày 10/10/2018
mình làm dc rồi thank 2 bạn nhiều
bạn anhchanghaudau có thể giải thêm có mình biết về ký tự ^ * $ ko
anhchanghaudau viết 13:05 ngày 10/10/2018
Được gửi bởi zKeitherz
mình làm dc rồi thank 2 bạn nhiều
bạn anhchanghaudau có thể giải thêm có mình biết về ký tự ^ * $ ko
Dấu ^ là đánh một dấu mốc có ý nghĩa đây là bắt đầu một chuỗi hoặc bắt đầu một dòng, còn $ đánh dấu mốc là cuối chuỗi hoặc cuối một dòng.
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}
zKeitherz viết 12:54 ngày 10/10/2018
ko biết nói gì để cám ơn bạn
bài viết rất chi tiết, mình hoc đã học thêm dc nhiều thứ
Bài liên quan
0