Giúp đỡ về regex

input mình chỉ cho phép nhập số hoặc số và 1 ký sự dấu +
ví dụ như: 3+, 123, 2345, 356+, 789+
Mình viết thế này ko biết sai chỗ nào nhỉ:
image
Cảm ơn mn rất nhiều!

Bạn dùng \+, còn + như bạn viết là đang match 1 hoặc nhiều kí tự bạn chỉ định. vd: a+ sẽ match a, aa, aaa…
Mình có viết regex này, bạn tham khảo thử: /\d+\+?/
Edit: mình thử lại và thấy sai, mình xin update: /^\d+\+?$/

3 Likes

cho mình hỏi là trường hợp có thể để trống hoăc điền theo rule thì mình viết thế này:/^(\d++)|?$/
bạn xem giúp mình sai chỗ nào. Cảm ơn bạn nhiều

1 Like

Phải escape dấu + đi đã \+
Tiếp theo là để match nguyên 1 string thì phải dùng cả ^$.

>> /^(\d+\+)?/.test("300+600")
true
6 Likes

Hê lô bạn, chắc bạn đang hơi nhầm ở ?,
vd: t?est thì sẽ match test hoặc est (t? tức có 1 t hay không có t nào đều được). Quay lại đoạn bạn viết |?$ thì bạn không chỉ ra kí tự trước ? mà bạn mong muốn nó xuất hiện 1 lần hoặc không lần xuất hiện ===> lỗi
Mình đóng góp một cách này, bạn tham khảo thử:

/^\s*$|^$|^\d+\+?$/ : (chuỗi chỉ gồm 0 white space hoặc nhiều kí tự white space) hoặc (chuỗi trống) hoặc (chuỗi bắt đầu bằng số và kết thúc bởi 0 dấu cộng hoặc 1 dấu cộng)


Bạn tham khảo thêm trang này sẽ phân tích regex hữu ích nè: regex101: build, test, and debug regex
Ps: mình có sai ở điểm nào mong nhận được ý kiến của cả nhà ạ.

1 Like

/^\s*$/ bao gồm cả /^$/ rồi mà :smiley:

2 Likes

à dạ đúng rồi, em viết thừa rồi hehe.

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