Regex number in Javascript
Chào mọi người. Mình đang làm Validate cho số Nhập vào. Số nhập vào có thể là số hữu tỉ nhưng không được là số 0: Ví Dụ:
0.5 --> True
08 --> False
Mình đã dùng thử cái này nhưng vẫn chưa có kết quả như mong đợi. Ai có biểu thức nào đúng chỉ mình với.
/^([+-]?[1-9]+\.?\d*|0)(\.\d+)?$/
Cảm ơn mọi người
2 CÂU TRẢ LỜI
regex = /0\.\d+|[1-9]\d*(\.\d+)?/
Kết quả:
0.011 --> True
03.1231 --> False
23.283189 --> True
0242 --> False
bạn ơi Regex bạn đưa nhập số 0 đầu tiên đã báo False rồi bạn
@ductuandt3 À mình định nghĩa 1 số mà bạn cần là 1 số thực dương, mà số thực dương thì không bao giờ có số 0 ở đầu trừ trường hợp số đó lớn 0 nhỏ hơn 1. Tức là những trường hợp đúng sẽ là 0.012, 0.23232, 1.2123, 231.23 và trường hợp sai sẽ là 032.12312, 023.
Nếu bạn muốn có cả trường hợp nhiều số 0 vẫn đúng nữa thì thêm 0+ là được mà.
Thực ra nếu bạn chịu khó dành khoảng 2h ra để tìm hiểu về regex thì bạn sẽ thấy nó cực kì đơn giản nếu bạn đã có mô tả chính xác về chuỗi mẫu. Thấy khó xong copy trên mạng về thử rất dễ sai và không đúng những gì mình muốn.
Mình sẽ giải thích về regex mình viết.
Có 2 trường hợp tách nhau bởi dấu OR được biểu diễn qua dấu |
- \d biểu thị 1 số tự nhiên từ 0-9
- [1-9] biểu thị 1 số tự nhiên từ 1-9
- dấu ? biểu thị ý nghĩa cụm đằng trước nó có thể xuất hiện 0 hoặc 1 lần
- + là kí tự đằng trước nó xuất hiện từ 1 lần trở lên
- * là kí tự đằng trước nó có thể 0 hoặc nhiều lần
- dấu . biểu thị dấu chấm, phân cách giữa phần nguyên và phần thực
Diễn giải bằng lời biểu thức của mình:
Số 0 ở đâu sau đó đến dấu chấm sau đó là đến các số từ 0-9 xuất hiện từ 1 đến nhiều lần OR một số bắt đầu bằng 1 số tự nhiên từ 1-9, sau đó có thể có các số từ 0-9 khác hoặc không, kết thúc bằng phần thực sau dấu chấm hoặc không có phần này cũng được
Còn tùy vào yêu cầu của bạn mà bạn có thể sửa lại. Chứ mình viết không False =)), chúng ta không hiểu ý nhau thôi.
@QuangPH cảm ơn bạn nhiều. Mình cũng đã tìm hiểu và viết được biểu thức đúng rồi.
Bạn thử Regex này xem?
- Kiểm tra chuỗi là số:
/^\d+(?:.\d+)?$/
VD: 0.388
- Kiểm tra trong một chuỗi có chứa số không:
/(\d+(?:.\d+)?)/
VD: "Hôm nay tôi trúng thưởng xổ số 50.000.000" => Số lấy ra theo regex: 50.000.000
- Nếu số nhập có thể là số âm thì thêm
(?:\+|\-)
:
1. /^(\+|\-)?\d+(?:.\d+)?$/
2. /((?:\+|\-)?\d+(?:.\d+)?)/
bạn ơi mình muốn cho phép nhập số 0.6 hoặc 0.5 hoặc 0.07 các kiểu ấy . Còn nếu nhập vào là 00 thì sẽ báo false. Khi nãy mình có dùng Regex của bạn nhưng vẫn không được ạ. Nhập dấu . sẽ báo False
@ductuandt3 Làm thêm cái if check trường hợp chỉ toàn là số 0 thì false luôn cũng được bạn nhỉ?